フォーム読み込み中
この記事は、ソフトバンク アドベントカレンダー 2025 、15日目の記事です。
こんにちは。2023年に新卒で入社し、現在は社内および法人顧客が利用するアプリケーションの開発に携わっている夏山です。
この記事では、インフラエンジニア(サーバーエンジニア)としてキャリアをスタートした私が、3年目でアプリ開発エンジニアへシフトするまでに取り組んできたことや、その過程での学習方法についてまとめます。
最初に触れておきたいのですが、私はインフラの業務が合わなかったわけではありません。障害対応やサーバー構築など、インフラエンジニアとしての業務には大きなやりがいを感じていました。
ただ、後述するさまざまな経験を通じてシステム全体の知識がつくにつれ、「インフラの知識も活かしつつ、自分でコードを書いて、ユーザーに直接届くプロダクトを作る側に行ってみたい」という思いが強くなり、キャリアチェンジを決断しました。
同じように「今の領域から新しい技術領域へ挑戦してみたい」と考えている方に、一つの事例として参考になれば幸いです。
私は新卒でインフラ領域の部署に配属され、キャリアの第一歩はLinuxサーバーの検証・維持管理業務から始まりました。学生時代は情報系の専攻ではなかったため、配属当初はサーバーへの接続方法やコマンド操作など、基礎的な部分から学ぶ毎日でした。
主な業務内容は以下の通りです。
最初は用語もわからず苦労しましたが、検証作業で発生したトラブルに対して、ログを読み解いて原因を突き止められた瞬間には、エンジニアとしての純粋な楽しさを感じていました。
また、当時、苦労して取得した「Red Hat 認定システム管理者 (RHCSA)」や「Red Hat 認定エンジニア(RHCE)」の資格は、OSレイヤーの知識を深めるのに非常に役立ちました。
この時期に培った「ログを見る習慣」や「サーバー内部の挙動への理解」は、今のアプリ開発業務でも私の大切な基盤となっています。
「アプリ開発に興味がある」といっても、いきなり部署異動ができるわけではありませんし、当時の私にはスキルも不足していました。まずは「今の業務と並行してできることから始める」というスタンスで動き出しました。
具体的には以下のような取り組みを行いました。
UdemyなどでJavaの基礎コースを受講し、実際に手を動かしてコードを書く感覚を掴みました。
部署内の業務効率化のため、Google Apps Script(GAS)を用いたツール開発を行いました。実際にユーザーからフィードバックをもらいながら機能を改善していくプロセスを経験し、「自分の作ったものが誰かの役に立つ」喜びを実感しました。
これらは小さな一歩でしたが、実際に動くものを作る経験を通じて、少しずつアプリ開発に必要な知識の輪郭が見えてきたように思います。
2年目中盤に、FlaskとLLMを組み合わせた社内アプリ(AutoInfra以下、「社内PoCアプリ」と略す)のPoC(概念実証)開発に参加することになりました。
それまでのGASでのツール作成とは異なり、ここには以下のような「Webアプリ開発の基本」が詰まっていました。
正直なところ、当時は「APIとは何か」「DB設計はどうあるべきか」といった知識が乏しく、Git操作にも不慣れでした。わからないことばかりで戸惑うこともありましたが、タスクを一つひとつ消化し、チームで開発を進める中で、「アプリ開発を本業にしたい」という気持ちが明確になりました。
知識不足を埋めるために、より実践的な学習環境を求めて行動しました。意識したのは「独学だけでなく、実務に近い環境に身を置くこと」です。
社内PoCアプリの中で、積極的に機能開発を担当しました。「こういう機能があった方がユーザーは使いやすいのではないか」とユーザー目線で考え提案し、自ら実装まで行いました。
その中で不足していると感じた知識は、プライベートの時間を使って学習し、翌日の業務で実践するというサイクルを回しました。学習方法は即効性を重視し、基本的にはYouTubeやUdemyなどの動画教材とChatGPTなどのAIツールを活用しました。また、学習のアウトプットとして簡単なToDoアプリなどを同じ技術スタックで開発し、理解度を確認しました。
当初、AIを用いて「とりあえず動くコード」を生成してもらって機能開発をしていたのですが、以下のような課題(技術的負債)を感じるようになりました。
AIは開発効率を向上してくれる強力なツールですが、自分のように経験や知識が浅い状態で頼りすぎると、かえって効率が悪くなったり、保守性や可読性が低いコードになってしまうと痛感しました。
そのため、基礎を固めるために「Recursion」などの学習サービスや技術書を利用し、アプリ開発に必要なコンピュータサイエンス等の基礎知識を体系的に学びました。Recursionは、元Facebook(Meta)のエンジニアの方が監修しており、CS以外にもデータベース、システムデザインなどアプリ開発に必要な内容が豊富です。コーディング問題をたくさん解きながら進めるアウトプット重視の形式だったため、基本的なデータ構造やアルゴリズム、基礎的なコーディング力が着実に身についたと感じています。
また、データベースやクリーンアーキテクチャなどの特定の分野について、もう少し体系的にインプットしたい時は技術書を活用しました。 これらの学習を経たことで、今ではAIをうまく活用しながら開発効率を上げることができていますし、AIに依存せずとも自力で機能開発ができる力がついたと思います。「急がば回れ」ではありませんが、この基礎固めの工程は本当にやってよかったと感じています。 (まだまだ知識不足を感じているので、現在進行形で継続しています)
社内PoCアプリで開発経験は積めていましたが、PoCの「最速で成果を出す」フェーズから、長期運用に必要となる実務的な品質(可読性、保守性)について考えるようになりました。「他の現場ではどのようなコードを書いているのか」「どのような技術スタック、アーキテクチャで開発しているのか」を知るため、以下の環境に飛び込みました。
社外副業
LLMを用いたデータ分析Webアプリの開発案件に参画しました。社内PoCアプリと似た案件でしたが、コードの中身は別物で学びが多かったです。定数を別ファイルで一括管理する、関心の分離を意識したディレクトリ構成にするなど、実務的な設計思想を学ぶことができました。
社内副業・兼務
社内副業制度を用いて全く別部署の新規事業案件に参画したり、同じ組織内の別部署にてアプリ開発案件を経験しました。Flask以外のモダンなフレームワーク(Next.js)や、静的型付け言語(TypeScript)を用いた開発を経験できたのは、技術の幅を広げる上で非常に大きかったです。
これらの案件を経験することで、より実務に近い形でのコードの書き方や設計思想、チーム開発の進め方などを学ぶことができ、自分の中での引き出しが増えたと感じています。
X(旧Twitter)やYouTubeなどで情報収集を行い、アプリ開発に関する最新のトレンドやベストプラクティスを学びました。特にXでは、同じようにキャリアチェンジを目指すエンジニアの方々の投稿や、経験豊富なエンジニアの方々の技術解説が満載で、視野を広げる際にとても役立ちました(Recursionを知ったのもこのおかげです)。 また、知人のエンジニアにも積極的に相談し、実務での具体的な課題解決方法やキャリアパスについてアドバイスをもらいました。
アプリ開発に必要なコーディングや技術のキャッチアップをする際、AI(ChatGPTやGitHub Copilot等)は非常に強力なパートナーになりました。私が特に意識していたのは、コードを生成させることよりも「コードを理解するために使う」という点です。
複雑な処理を追う際、文字だけでは理解が難しい場合があります。そこで、AIに対して「このコードの処理フローをMermaid記法のシーケンス図で出力して」と指示し、視覚的に処理の流れを把握するようにしました。 図として可視化されることで、条件分岐やデータの流れが直感的に理解できるようになります。
例えば、PythonのFlaskで開発を始めた当初、コードを読んでいると「この @login_required って、結局いつ動いてるの?」「エラーハンドリングはどこで制御すべき?」と混乱することがありました。 そこで、AIにコードを渡し、シーケンス図を描いてもらうことで処理の全体像を把握するようにしました。以下はその一例です。
AIに渡したコード
@app.route('/api/user/profile', methods=['GET'])
@login_required # ここで認証チェックが入る
def get_user_profile():
user_id = request.args.get('id')
# DBからユーザーを検索
user = User.query.filter_by(id=user_id).first()
if user is None:
return jsonify({"error": "User not found"}), 404
return jsonify({
"id": user.id,
"username": user.username,
"email": user.email
}), 200
プロンプトの例
あなたはシニアエンジニアです。このFlaskのコードの処理フローを、Mermaid記法のシーケンス図で可視化してください。特にデコレータ(@login_required)による認証チェックのタイミングと、DB検索の結果による分岐(正常/異常)がわかるように描いてください。
出力されたMermaid図(コード)
AIが作成してくれたMermaidのコードは以下の通りです。
sequenceDiagram
participant Client as クライアント
participant App as Flaskアプリ (@login_required)
participant DB as データベース
Client->>App: GET /api/user/profile?id=1
activate App
Note over App: デコレータによる認証チェック
alt ログインしていない / トークン無効
App-->>Client: 401 Unauthorized
else ログイン済み
App->>DB: User.query.filter_by(id=1)
activate DB
alt ユーザーが見つからない
DB-->>App: None
App-->>Client: 404 Not Found
else ユーザーが見つかった
DB-->>App: User Object
deactivate DB
App->>App: JSONデータの作成
App-->>Client: 200 OK
end
end
deactivate App
出力されたMermaid図(イメージ)
出力されたMermaidコードをVisual Studio Codeなどに貼り付けてプレビュー表示させることで、以下のようにグラフ化させることができます。
コード上では`def get_user_profile():`の上にさらっと書いてあるだけの `@login_required`ですが、図にすることで「関数の処理が始まる前に、門番のように認証チェックが走っている」という構造が直感的に一目で理解できました。 このように、コードの処理や技術構成の理解にMermaidで図式化してもらうという活用法は非常に役立ちました。今でも、業務の中でのチームメンバーとの認識合わせにこの手法を頻繁に使っています。
単に動くコードを書くだけでなく、その背景にある仕組みを理解するためにAIを活用しました。 「この実装パターン以外にどのような選択肢があるか?」「なぜこの記述が必要なのか?」「こういう理解であっている?」といった疑問を投げかけ、納得いくまで解説してもらうことで、知識の定着を図りました。 AIにコードを書かせるだけはなく、「自分の理解度が正しいかを確認する相手」として活用することで、基礎体力がついたと感じています。
ChatGPTやGitHub Copilotにて、自分が書いたコードや設計について、シニアエンジニアの観点でAIにレビューをもらっていました。 昨今のAIツールではSystem Prompt(前提条件)を設定できるので、そこに「シニアエンジニアとして、保守性とパフォーマンスの観点から指摘してください」といった背景を設定するだけで、質の高いフィードバックが得られます。 もちろん、AIの回答が全て正しいわけではありませんが、自分一人では気づけない視点を得られるという意味で、視野を広げるのに役立ちました。
インフラエンジニアとしてのキャリアをスタートし、アプリ開発エンジニアへとシフトできたのは、自分自身の意思と継続的な学習、そして実務経験を積むための積極的な行動があったからこそだと思います。 また、関わってくださった多くの方々やAIツールの活用が大きな助けとなったことも間違いありません。
この記事が、これから新しい領域への挑戦を考えている方の背中を、少しでも押すことができれば嬉しいです。
最後まで読んでいただき、ありがとうございました。
明日の ソフトバンク アドベントカレンダー 2025 もおたのしみに!
以下に個人的におすすめの学習サービスやYoutubeを紹介します。
先述している通り、アウトプットしながらCSの基礎やアプリ開発に必要な知識を網羅的に学習できます。CS中級しかまだ私はちゃんと受講できていないのですが、学びがとても多く、CSをちゃんと学びたい方には非常におすすめです。
これは皆さん使っている方が多いかと思いますが、効率的に特定の分野をキャッチアップするのに使っています。
元LINEヤフー株式会社のソフトウェアエンジニアの方が運営するYoutubeチャンネルです。テック業界の最前線で活躍するプロフェッショナルのインタビューや、最新技術動向、キャリア構築のヒントなど、エンジニアの幅広いテーマを配信しています。優秀なエンジニアの方の学習方法・業務の仕方やキャリアの考え方などを学ぶことができ、とても参考になります。
条件に該当するページがございません