新卒3年目でインフラからアプリ開発へ。キャリアチェンジを支えた取り組みとAI活用

2025年12月15日掲載

キービジュアル

この記事は、ソフトバンク アドベントカレンダー 2025 、15日目の記事です。

こんにちは。2023年に新卒で入社し、現在は社内および法人顧客が利用するアプリケーションの開発に携わっている夏山です。

この記事では、インフラエンジニア(サーバーエンジニア)としてキャリアをスタートした私が、3年目でアプリ開発エンジニアへシフトするまでに取り組んできたことや、その過程での学習方法についてまとめます。

最初に触れておきたいのですが、私はインフラの業務が合わなかったわけではありません。障害対応やサーバー構築など、インフラエンジニアとしての業務には大きなやりがいを感じていました。

ただ、後述するさまざまな経験を通じてシステム全体の知識がつくにつれ、「インフラの知識も活かしつつ、自分でコードを書いて、ユーザーに直接届くプロダクトを作る側に行ってみたい」という思いが強くなり、キャリアチェンジを決断しました。

同じように「今の領域から新しい技術領域へ挑戦してみたい」と考えている方に、一つの事例として参考になれば幸いです。

目次

この記事では...
  • インフラエンジニア時代の経験
  • アプリ開発にシフトしたいと考えるようになったきっかけ
  • シフトするために具体的に行動したこと(社内・社外)
  • 未経験領域のキャッチアップにおけるAI活用法

インフラエンジニアとしてのスタート

私は新卒でインフラ領域の部署に配属され、キャリアの第一歩はLinuxサーバーの検証・維持管理業務から始まりました。学生時代は情報系の専攻ではなかったため、配属当初はサーバーへの接続方法やコマンド操作など、基礎的な部分から学ぶ毎日でした。

主な業務内容は以下の通りです。

  • ApacheやSquid、Vsftpd、Postfixなどのミドルウェアの設定変更・管理
  • システムログの調査・解析
  • Ansibleを用いた構築自動化
  • 技術的な問い合わせ対応

最初は用語もわからず苦労しましたが、検証作業で発生したトラブルに対して、ログを読み解いて原因を突き止められた瞬間には、エンジニアとしての純粋な楽しさを感じていました。 

また、当時、苦労して取得した「Red Hat 認定システム管理者 (RHCSA)」や「Red Hat 認定エンジニア(RHCE)」の資格は、OSレイヤーの知識を深めるのに非常に役立ちました。

この時期に培った「ログを見る習慣」「サーバー内部の挙動への理解」は、今のアプリ開発業務でも私の大切な基盤となっています。

キャッチアップのファーストステップ

「アプリ開発に興味がある」といっても、いきなり部署異動ができるわけではありませんし、当時の私にはスキルも不足していました。まずは「今の業務と並行してできることから始める」というスタンスで動き出しました。

具体的には以下のような取り組みを行いました。

基礎学習と実践

UdemyなどでJavaの基礎コースを受講し、実際に手を動かしてコードを書く感覚を掴みました。

業務改善ツールの作成(GAS)

部署内の業務効率化のため、Google Apps Script(GAS)を用いたツール開発を行いました。実際にユーザーからフィードバックをもらいながら機能を改善していくプロセスを経験し、「自分の作ったものが誰かの役に立つ」喜びを実感しました。

これらは小さな一歩でしたが、実際に動くものを作る経験を通じて、少しずつアプリ開発に必要な知識の輪郭が見えてきたように思います。

「AIアプリケーションのPoC」への参画

2年目中盤に、FlaskとLLMを組み合わせた社内アプリ(AutoInfra以下、「社内PoCアプリ」と略す)のPoC(概念実証)開発に参加することになりました。 

それまでのGASでのツール作成とは異なり、ここには以下のような「Webアプリ開発の基本」が詰まっていました。

  • API連携の実装
  • データベース連携
  • Gitを用いたチーム開発

正直なところ、当時は「APIとは何か」「DB設計はどうあるべきか」といった知識が乏しく、Git操作にも不慣れでした。わからないことばかりで戸惑うこともありましたが、タスクを一つひとつ消化し、チームで開発を進める中で、「アプリ開発を本業にしたい」という気持ちが明確になりました。

実際にやったこと(行動編)

知識不足を埋めるために、より実践的な学習環境を求めて行動しました。意識したのは「独学だけでなく、実務に近い環境に身を置くこと」です。

 

1. 業務内での機会を最大化する

社内PoCアプリの中で、積極的に機能開発を担当しました。「こういう機能があった方がユーザーは使いやすいのではないか」とユーザー目線で考え提案し、自ら実装まで行いました。

その中で不足していると感じた知識は、プライベートの時間を使って学習し、翌日の業務で実践するというサイクルを回しました。学習方法は即効性を重視し、基本的にはYouTubeやUdemyなどの動画教材ChatGPTなどのAIツールを活用しました。また、学習のアウトプットとして簡単なToDoアプリなどを同じ技術スタックで開発し、理解度を確認しました。

 

2. CS(コンピュータサイエンス)やシステム設計の基礎を固める

当初、AIを用いて「とりあえず動くコード」を生成してもらって機能開発をしていたのですが、以下のような課題(技術的負債)を感じるようになりました。

  • AIが生成したコードの量が多く、読むのが大変
  • そもそもAIが生成したコードをすぐに理解できず、合っているかは実行してみないとわからない
  • AIに意図がうまく伝わらず、何度もやりとりをする必要があり、逆に時間がかかる

AIは開発効率を向上してくれる強力なツールですが、自分のように経験や知識が浅い状態で頼りすぎると、かえって効率が悪くなったり、保守性や可読性が低いコードになってしまうと痛感しました。

そのため、基礎を固めるために「Recursion」などの学習サービスや技術書を利用し、アプリ開発に必要なコンピュータサイエンス等の基礎知識を体系的に学びました。Recursionは、元Facebook(Meta)のエンジニアの方が監修しており、CS以外にもデータベース、システムデザインなどアプリ開発に必要な内容が豊富です。コーディング問題をたくさん解きながら進めるアウトプット重視の形式だったため、基本的なデータ構造やアルゴリズム、基礎的なコーディング力が着実に身についたと感じています。

また、データベースクリーンアーキテクチャなどの特定の分野について、もう少し体系的にインプットしたい時は技術書を活用しました。 これらの学習を経たことで、今ではAIをうまく活用しながら開発効率を上げることができていますし、AIに依存せずとも自力で機能開発ができる力がついたと思います。「急がば回れ」ではありませんが、この基礎固めの工程は本当にやってよかったと感じています。 (まだまだ知識不足を感じているので、現在進行形で継続しています)

 

3. 社外・社内の機会を活用して経験を積む

社内PoCアプリで開発経験は積めていましたが、PoCの「最速で成果を出す」フェーズから、長期運用に必要となる実務的な品質(可読性、保守性)について考えるようになりました。「他の現場ではどのようなコードを書いているのか」「どのような技術スタック、アーキテクチャで開発しているのか」を知るため、以下の環境に飛び込みました。

社外副業

LLMを用いたデータ分析Webアプリの開発案件に参画しました。社内PoCアプリと似た案件でしたが、コードの中身は別物で学びが多かったです。定数を別ファイルで一括管理する、関心の分離を意識したディレクトリ構成にするなど、実務的な設計思想を学ぶことができました。

社内副業・兼務

社内副業制度を用いて全く別部署の新規事業案件に参画したり、同じ組織内の別部署にてアプリ開発案件を経験しました。Flask以外のモダンなフレームワーク(Next.js)や、静的型付け言語(TypeScript)を用いた開発を経験できたのは、技術の幅を広げる上で非常に大きかったです。

これらの案件を経験することで、より実務に近い形でのコードの書き方や設計思想、チーム開発の進め方などを学ぶことができ、自分の中での引き出しが増えたと感じています。

 

4. SNSや知人からの情報収集

X(旧Twitter)やYouTubeなどで情報収集を行い、アプリ開発に関する最新のトレンドやベストプラクティスを学びました。特にXでは、同じようにキャリアチェンジを目指すエンジニアの方々の投稿や、経験豊富なエンジニアの方々の技術解説が満載で、視野を広げる際にとても役立ちました(Recursionを知ったのもこのおかげです)。 また、知人のエンジニアにも積極的に相談し、実務での具体的な課題解決方法やキャリアパスについてアドバイスをもらいました。

キャッチアップ時のAI活用方法

アプリ開発に必要なコーディングや技術のキャッチアップをする際、AI(ChatGPTやGitHub Copilot等)は非常に強力なパートナーになりました。私が特に意識していたのは、コードを生成させることよりも「コードを理解するために使う」という点です。

1. 処理フローの可視化(Mermaid記法)

複雑な処理を追う際、文字だけでは理解が難しい場合があります。そこで、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で図式化してもらうという活用法は非常に役立ちました。今でも、業務の中でのチームメンバーとの認識合わせにこの手法を頻繁に使っています。

 

2. 「なぜ?」を深掘りする壁打ち

単に動くコードを書くだけでなく、その背景にある仕組みを理解するためにAIを活用しました。 「この実装パターン以外にどのような選択肢があるか?」「なぜこの記述が必要なのか?」「こういう理解であっている?」といった疑問を投げかけ、納得いくまで解説してもらうことで、知識の定着を図りました。 AIにコードを書かせるだけはなく、「自分の理解度が正しいかを確認する相手」として活用することで、基礎体力がついたと感じています。

 

3. シニアエンジニアエージェントによるレビュー

ChatGPTやGitHub Copilotにて、自分が書いたコードや設計について、シニアエンジニアの観点でAIにレビューをもらっていました。 昨今のAIツールではSystem Prompt(前提条件)を設定できるので、そこに「シニアエンジニアとして、保守性とパフォーマンスの観点から指摘してください」といった背景を設定するだけで、質の高いフィードバックが得られます。 もちろん、AIの回答が全て正しいわけではありませんが、自分一人では気づけない視点を得られるという意味で、視野を広げるのに役立ちました。

おわりに

インフラエンジニアとしてのキャリアをスタートし、アプリ開発エンジニアへとシフトできたのは、自分自身の意思と継続的な学習、そして実務経験を積むための積極的な行動があったからこそだと思います。 また、関わってくださった多くの方々やAIツールの活用が大きな助けとなったことも間違いありません。

この記事が、これから新しい領域への挑戦を考えている方の背中を、少しでも押すことができれば嬉しいです。

最後まで読んでいただき、ありがとうございました。

明日の ソフトバンク アドベントカレンダー 2025   もおたのしみに!

おまけ

以下に個人的におすすめの学習サービスやYoutubeを紹介します。

学習サービス

Recursion

先述している通り、アウトプットしながらCSの基礎やアプリ開発に必要な知識を網羅的に学習できます。CS中級しかまだ私はちゃんと受講できていないのですが、学びがとても多く、CSをちゃんと学びたい方には非常におすすめです。

Udemy

これは皆さん使っている方が多いかと思いますが、効率的に特定の分野をキャッチアップするのに使っています。

Youtube

TECH WORLD

元LINEヤフー株式会社のソフトウェアエンジニアの方が運営するYoutubeチャンネルです。テック業界の最前線で活躍するプロフェッショナルのインタビューや、最新技術動向、キャリア構築のヒントなど、エンジニアの幅広いテーマを配信しています。優秀なエンジニアの方の学習方法・業務の仕方やキャリアの考え方などを学ぶことができ、とても参考になります。

関連セミナー・イベント

条件に該当するページがございません

おすすめの記事

条件に該当するページがございません