- 誤字脱字をなくそう
- なぜそれを作ったのかを書こう
- 技術選定の理由を書こう
- 設計をドキュメントに書こう、あと図もね
- 非機能を考慮しよう
- ボトルネックを考えてみよう
- 妥協した点 / こだわった点を書こう
- まとめ
※Webアプリのポートフォリオの話をします
コードが最低限かけることはもちろん大事ですが、実はそれ以上にメタ的な情報が大事です。仕事としてコーディングをしていくとたくさん考えることが発生しますが、そのほとんどが独学だと知らなかったりします。
この記事は無料でその観点を教えようというものです。これを実践するだけであなたのポートフォリオのレベルは相当上がります。
誤字脱字をなくそう
誤字脱字はそもそも論外。それ以外にIT用語間違ってるの見ると残念に思うのでキチンとみましょう。
- 例えば:HTMLをHMTLって書いていたりとか
- Markdownうまいことつかえず「・」をつかってるとか
なぜそれを作ったのかを書こう
- あなたが作ったものは誰のどんな課題を解決しますか?
- それを作るとどうして嬉しいのですか?
もちろんTwitterやInstagramの真似っこアプリを作るような場合は何も理由がないと思うのですが、そういう時は「このアプリの作成を通じてxxを学べると思ったから」ぐらいの事はREADMEに書きましょう。
技術選定の理由を書こう
それしか習ってないのかもしれないけど、なぜその言語を今回のプロダクト作成に使用したのか?なぜそのDBなのか?について明確にかければ、技術選定という観点を持っていることが伝わります。
できれば比較をした上でこれを使ったんですがかけるとベストです。
設計をドキュメントに書こう、あと図もね
設計をREADMEに書くならシーケンス図とかアクティビティ図、ER図とか書いておくとよいでしょう。(draw.ioとか使ってください)
設計図をかけると言うことはコードを抽象化でき、人に説明できることの証左になります。かつ他の言語に移ったときにも同じことができる(すくなくともコードの書き方さえ覚えれば)ことにもなります。
非機能を考慮しよう
みなさんがこだわっているのは機能です。でもシステムは非機能がついて回ります。
非機能要件とは、(誰に言われるわけでもないが)システムを安定稼働させるために求められる隠れた要望です。以下のようなものが挙げられます。(知らない言葉は検索してください、Webエンジニアなら知ってるのがマストです)
- セキュリティ(XSS/CSRF/SQLインジェクション/OSインジェクションなど)
- 可用性 / 耐障害性
- 性能
- 運用保守性
- バックアップ/リストア
- CI / CD
- テスト(の容易性、カバレッジ)
- 監視
- ログ / メトリクス(可観測性)
- 開発 / ステージング環境の考慮
などが挙げられるでしょう。詳細なことはIPAの非機能要件の資料を見るといいでしょう。これらを考慮してアプリケーションを設計・構築する必要があるわけです。
しかしこれらを意識してコードをかける初心者はほぼいません。だって難しいし状況によって変わるから。なので逆に言えばこれらを考慮したポートフォリオが作れれば「圧倒的に差がつけられるわけです」。どうやってやればいいんですか? はい。それは調べてください。近道はありません。
ボトルネックを考えてみよう
十中八九HTTPベースのWebサービスを作ることが多いと思いますが、
- あなたが作ったサービスに大量のアクセスがきたらどうなりますか?
- 実際に負荷をかけてみましたか?
- ボトルネックはどこにありますか?またどこが最初に詰まると思いますか?
といった質問に答えられるでしょうか? この質問はあなたが本当に作ったアプリケーションに対して理解をしているのか?を問う質問です。動かしているインフラの環境から、アプリケーションのロジック、SQLクエリ、DBの性能などなど様々な観点がボトルネックになり得ます。
実際に負荷をかけたり、シナリオテストをやって確認してみましょう!そして、それを可視化してみましょう!するとあなたはそれを改善するためにいろいろ悩むわけです。その悩み〜解決のプロセスがとても重要なので是非やってください。
妥協した点 / こだわった点を書こう
妥協した点を書くことで「こういう知識を持っています、ただまだやっていません」と興味の幅やこんなことを考えているよということをアピールできます。
また苦労した点や、こだわった点を説明することであなたのスキルレベルやエンジニアとしての伸びしろを察してもらうことができます。
まとめ
ここまでのことがもし仮に全部できたら、あなたは相当レベルの高いWebエンジニアになれています。
未経験だったとしても、転職には困らないレベル感です。すごい!