まず、よくある失敗パターン3つ
自分がやってしまったこと、そして他の受講生を見ていて気づいたことから、典型的な失敗を挙げます。心当たりがあれば、そこが伸びしろです。
TODOアプリだけで終わっている。 TODOアプリはLaravel入門の定番ですが、それだけでは「Laravelを触ったことがある」という証明にしかなりません。CRUDの基本は、できて当たり前の地点です。その先にある「自分が作りたかったサービス」まで踏み込まないと、他の応募者との差が出ません。
READMEが空、あるいは「サンプルアプリ」の一行だけ。 これは想像以上に致命的です。GitHubに公開しても、READMEがなければ、見る側は何のアプリか分からないまま閉じます。「説明できないものを作った人」という印象すら与えかねません。
デプロイしていない。 ローカルでしか動かないアプリは、実質的に「見られないアプリ」です。URLを開くだけで動くものと、環境構築が必要なものとでは、確認してもらえる確率がまるで違います。
この3つは、どれも技術力の問題ではありません。見せ方の問題です。同じ実力でも、ここで評価が大きく変わります。
だから、READMEに何を書くか
READMEは、ポートフォリオの顔です。最低限、次の3つは書いてください。
このアプリは何か。 一行で説明できる形にする。「飲食店向けの予約管理アプリです」で十分です。
なぜ作ったか。 ここが一番効きます。後述しますが、動機のストーリーは提案時の武器になります。
どんな技術を使ったか。 使用言語、フレームワーク、DB、インフラ。読む側は、ここで「うちの案件に合うか」を判断しています。
余裕があれば、画面のスクリーンショットとER図も添えてください。文字を読む前に、視覚で伝わります。
デプロイして、URLで見せる
ローカルで完結させず、URLを貼れる状態にしてください。デプロイ先はRenderやRailwayなど、個人開発で使いやすいサービスがあります。
「まだ完成度が低いから公開したくない」——僕もそう思っていました。恥ずかしさがありました。でも、公開しなければ誰にも見てもらえません。存在しないのと同じです。「完璧でなくていいから公開する」という判断は、ポートフォリオに限らず、フリーランスとして仕事をするうえで必要な感覚でした。
「なぜ作ったか」は、想像以上に効く
実際にクライアントへの提案でポートフォリオを使ってみて、意外だったことがあります。
技術的な完成度より、「なぜこれを作ったか」というストーリーの方が、相手に刺さる場面が多かったのです。
「自分が実際に困っていたことを解決したくて作りました」——この一文があるだけで、クライアントには「この人はどういう思考でものを作るのか」が伝わります。逆に、技術的にきれいでも動機が語れないと、ただのサンプルに見えてしまう。
だからアイデア出しの段階で悩んでいる人には、こう言いたいです。完璧な差別化を探さなくていい。自分が実際に困っていたことを解決するアプリ、それだけで説得力は生まれます。 「他の人と被らないもの」を探して何日もコードを書かずにいるより、そちらの方がはるかに価値があります。
ポートフォリオは「一つの完成品」ではなく「積み上げるもの」
ここは、僕が最初に誤解していた点です。
ポートフォリオを「渾身の一作」だと思っていました。実際は違います。複数の制作物の積み重ねが、そのままポートフォリオになります。一つのアプリを磨き続けるより、いくつか作って並べた方が、できることの幅が伝わります。
そして重要なのは、更新し続けることです。最初に作ったものを3ヶ月後に見ると、「もっと良く書けるのに」と感じる部分が必ず出てきます。それはスキルが上がった証拠です。その感覚が出てきたら、リファクタリングしてGitHubを更新してください。「半年前より今の方が良いコードを書ける」という事実そのものが、成長の証明になります。
古いままのポートフォリオは、古い評価しか呼びません。
制作でつまずいたときに、僕がやったこと
ここからは、実際に作る過程での話を短く書きます。
一番つらかったのは、作り始めてから設計の甘さに気づいたときでした。とにかく動かしてから直せばいい、と考えて書き始めた結果、機能が増えるにつれて「一つ直すと別の場所が壊れる」状態になりました。原因ははっきりしていて、Controllerに全部を詰め込んでいたことです。バリデーションもビジネスロジックもデータ取得も、一つのメソッドの中にありました。
最終的に、制作物のひとつを大幅に作り直す判断をしました。せっかく書いたものを捨てるのは、正直かなり抵抗がありました。使った時間が無駄になる感覚がある。でも「このまま進めても良いものにならない」と分かっている状態で進む方が、もっと無駄です。
作り直しで変えたのは2点。テーブル設計をシンプルにしたことと、Controllerの責務を分けたこと(バリデーションはFormRequestへ、ロジックはServiceクラスへ、Controllerは受け渡しに集中)。結果、実装スピードが上がりました。「どこに何を書くか」が決まっているだけで、迷う時間が消えるからです。
ここから得た教訓は、完璧な設計は要らないが、テーブル構成と機能の流れくらいは、実装前に書き出しておくべきだということ。あとで変えることになっても、最初に考えた痕跡が判断の基準になります。
エラーで詰まった時間は、無駄にならない
Laravelでの制作中、画面が真っ白になる、500エラーが出る、データが保存されない、一覧に何も表示されない——数え切れないほど詰まりました。特に苦しんだのはEloquentのリレーション周りで、hasManyとbelongsToの設定を理解しきれておらず、延々とエラーを出し続けていました。
ただ、この時間は無駄ではありませんでした。エラーメッセージには「どのファイルの何行目で何が起きたか」が書いてあります。最初は怖くて流し読みしていましたが、ちゃんと読む習慣がついてから、原因の絞り込みが一気に速くなりました。
この経験が、後の実案件でのデバッグ力にそのままつながっています。今つらい人に言えるのは、同じエラーで二度は詰まらないということです。
まとめ
ポートフォリオ制作は、想像以上に大変でした。アイデアで悩み、設計で失敗し、エラーで詰まり、一度は大きく作り直しました。
でも、作ったあとに評価されるかどうかを分けたのは、技術力ではありませんでした。READMEを書いているか。デプロイしてURLで見せているか。「なぜ作ったか」を語れるか。更新し続けているか。——ここでした。
作って終わりにしないでください。ポートフォリオは完成品ではなく、育てていくものです。完璧を待たず、まず公開する。そこから、評価してもらえる状態が始まります。