もしもいま、Pythonをイチから学び直すとしたら? Recustomer株式会社 眞鍋さんが考える学習ロードマップ

めまぐるしく変化するテックの世界。技術を身に着けるうえで学ぶべきポイントや学習環境なども年々変わっています。 そこで「もしもいまの環境で、テックのことをイチから学び直すことになったら、自分はどんな風に勉強したいか」というIFストーリーを通じて、技術との向き合い方を考え直してみる企画「テック転生」。

今回は、Recustomer株式会社 CTO・眞鍋(@curekoshimizu)さんに“自分だったらこう進めたい、Pythonの学習ロードマップ”を伺いました。

はじめに:昨今のPythonへの注目度

Pythonという言語は近年、特に注目されております。TIOBE Programming Community Index によれば、2021年10月以降、2025年3月現在に至るまで、Pythonは首位の座を守り続けています。

さらに注目すべきは、2024年にGitHubにおいても大きな転換が起きたことです。過去10年間にわたりプログラミング言語のトップを維持してきたJavaScriptを抜き、Pythonが初めて最も使用される言語として1位に躍り出ました。 また、同2024年には、Microsoft ExcelにPython統合機能が実装され、非プログラマー層への普及も加速しました。

元々、行列計算を取り巻くエコシステムとして特徴があったPythonという言語は、科学技術計算という分野を飛び越えて、機械学習と親和性を高めて発展・進化し、そして近年のAIブームにおいて欠かせない役割となりました。

幅広い応用

このPythonはAIとの関係で語られることも多いのですが、とても幅広い分野多くの分野と親和性が高いことも特徴かと思います。例えば

  • 画像処理・コンピュータビジョン
  • データ分析・可視化
  • ロボティクス・制御システム
  • Web開発
  • 科学技術計算・シミュレーション
  • 自動化スクリプト・業務効率化

など、本当に多岐にわたっています。

こうした汎用性の高さから、データサイエンティストや研究者、Webエンジニア、一般のビジネスユーザーまで、幅広い層に使われているというのがPythonの人気を支える要因となっています。

私は、例えば、ロボティクスや画像処理・制御システムの開発に携わっていたこともあれば、機械学習、シミュレーション、レンダリングの分野で活用していたこともありました。また、ETL処理の実装や、業務効率化のためのスクリプト開発にもPythonを活用してきたりと、幅広く利用してきました。

Pythonと私

序論が長くなりましたが、はじめまして。眞鍋 秀悟(まなべ しゅうご)と申します。現在、Recustomerという会社でCTOを務めています。

私は日々多くの方とカジュアル面談を行っていますが、特に若い世代におけるPythonの経験率の高さを実感しています。

私自身のキャリアを振り返ると、10年に渡ってPythonを使ってきました。特にPreferred NetworksやMujinでのキャリアは、ほとんどPythonと共にあったと言えます。このPythonという言語を、様々な分野や領域で活用してきた、比較的珍しい経歴を歩んできたように思います。

現在、RecustomerではPythonを主にWeb開発で活用しています。Pythonは特定の分野に限らず、幅広い用途で活躍できる言語であり、その柔軟性の高さを日々実感しています。

Pythonは「遅く」・「壊れやすい」のか?

私のPythonに対する認識を大きく変えたのは、「ロボティクス」という分野でした。ロボット開発では主にPythonとC++が使用されますが、特に求められるのは「リアルタイム性」と「堅牢性」です。人に危害を及ぼす可能性のあるロボットでは、システムの安定性が不可欠であり、エラーの発生頻度を極限まで抑える必要があります。

そんな中、私が最も驚いたのは、多くの社会実装されたロボットのシステムにPythonが採用され、それらが24時間稼働しているという事実でした。スクリプト言語であるPythonには「遅い」「壊れやすい」というイメージを持っていたため、こうした厳しい環境で運用されていることに衝撃を受けました。

しかし、実際に経験を積む中で、適切な設計を施せばPythonでも高速かつ安定したシステムを構築できることを学びました。型ヒントやLinterなどを巧みに活用し、エラーを未然に防ぐ仕組みを整えることで、システムの堅牢性は大きく向上します。また、ライブラリやフレームワークの進化もあり、Pythonは単なるスクリプト言語にとどまらず、24時間365日稼働する社会インフラを支える技術として活用できると実感しました。

この学びは、私のキャリアの中でも特に印象的なものであり、現在のRecustomerにおけるPythonを活用した開発システムの土台にもなっています。

この流行っている「Python」を、一から勉強することを考えてみる

今回は、「もし今、Pythonを一から学び直すとしたら?」をテーマに、Pythonを効率的に学ぶ方法について考えてみます。

Pythonには非常に多くの学習資料が存在するため、自分に合った本やWebページを選ぶことが大切です。選択肢が多いということは、自分の好みに合う学習スタイルを見つけやすいというメリットにもなります。

まずは、気になった本を一通り読んでみるのが良いでしょう。そして、その過程で出てきたキーワードや疑問点を、ブログ記事や公式ドキュメントを活用して補完しながら学習していくことで、より深い理解につながるはずです。こうした学習法を続けることで、Pythonの中級者へとステップアップできる道が開けるのではないかと思います。

推薦する書物

Python初心者向けの書籍は数多くありますが、初級レベルから一歩進み、中級者を目指すための良書として、次の本を推薦します。

VTuberサプーが教える! Python 初心者のコード/プロのコード gihyo.jp

また、ディープラーニングの基礎をPythonで実装しながら学ぶ「ゼロから作るDeep Learning」シリーズも非常におすすめです。この本の内容自体が素晴らしいのはもちろん、さらに学習効果を高める方法として、次のような取り組みを推奨します。

  • コードを写経しながら学ぶ
  • 型ヒントを加える
  • Linter を厳しく設定する
  • 単体テストを追加しながら実装する

こうすることで、Pythonの実践的なコーディング力を鍛えつつ、より頑強なコードの書き方も習得できます。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 www.oreilly.co.jp

初心者の方にロードマップを示すなら

今回のテーマである「記憶喪失」をして、Pythonのことを何も知らない人に向けたロードマップを作成しました。

どのようなキーワードに注目しながらPythonを学ぶべきかを示しているので、これらのキーワードを手がかりに、ブログや書籍を活用しながら知識を深めてもらえればと思います。

ここからの章は、実際にPythonを学ぶ際に参考にしていただければ幸いです。

まずはPythonを試す環境を構築する

まずは、Pythonを試せる環境を用意しましょう。

最も手軽に始められるのは、Google Colaboratoryを使う方法です。Googleアカウントさえあればすぐに利用でき、環境構築なしでPythonを実行できます。また、機械学習向けに無料でGPUが使えるという利点もあります。コードはGoogleアカウントに保存されるため、ローカル環境の準備が不要なのも便利です。また、よく使われるライブラリもすでにインストールされている点でも初心者に優しい環境と言えます。

Colabでは、セル単位でコードを実行できるため、学習や試行錯誤に適しています。例えば、1つのセルで変数を定義し、次のセルでその変数を使うといった流れでコードを書けます。

このような特徴をもったローカル環境の構築方法としては、Jupyter Notebook環境という選択肢もあります。 また、近年のVSCodeエディタを利用して、このような試行錯誤がしやすい環境をつくることもできます。

特におすすめなのがVSCodeの、Python Interactive Windowという機能です。この機能を利用すると、Pythonスクリプト内でブロック単位にコードを実行できます。例えば、以下のように # %% を使ってコードを区切ると、セルごとに実行可能になります。

# %%
msg = "Hello World"
print(msg)

# %%
msg = "Hello again"
print(msg)

このコードをVSCodeで開くと、各ブロックの上に "Run Cell" というボタンが表示され、クリックするとそのブロックだけを実行できます。

こうした環境は、短いスクリプトのテストやプロトタイピングに適しており、初心者がPythonを学ぶ際にも非常に便利です。加えて、上級者でもデータ処理の検証やコードのデバッグで役立つ場面が多く、実務でも十分活用できる環境です。

基本機能を学ぶ

まずは、Pythonの基本的な文法をしっかり学びましょう。

ここでは、学習する際に特に注意しておくべきポイントを紹介します。初学者がつまずきやすい点を事前に知っておくことで、効率的に学習を進めることができます。

データ型とその機能を学ぶ

まずはたくさんのデータ型を理解しましょう。

整数型、浮動小数点型、文字列型、bool型という基本的な型に加えて、list, tuple, dict, set という複数の値を格納するデータ構造が特に大切になります。

dictの勉強をする際に合わせて、標準ライブラリ collections の defaultdict も合わせて学んでおくことを推奨します。

基本文法 - 条件式、ループ処理、関数、無名関数

これら基本文法のうち、いくつか学ぶ際に注意すべきことがあります。

一つはPythonには、ブロックスコープがないことです。これにより、条件分岐やループ内で定義した変数が、そのブロック外でも使える点に注意してください。これは他の言語を経験している人が特につまずきやすいポイントです。

if True:
    x = 10  # ブロック内で定義
print(x)  # 10 (ブロック外でも参照可能)

もう一つは、デフォルト引数に関してになります。関数のデフォルト引数にlistやdictなどの「不変ではない」(mutable な) データ構造を、デフォルト引数にすべきではないという点です。

def append_1(lst=[]):
    lst.append(1)
    return lst
print(append_1()) # [1]
print(append_1()) # もう一回やると[1]ではなく、[1, 1] という結果になる

これら2点は、Python以外の言語に詳しい方が初めて学ぶときに、引っかかりやすい挙動になりますので注意喚起しておきます。

クラス

クラスを勉強するときに一緒に学ぶとよいことは、classmethodとproperty、そして継承の方法になります。そして一緒に学ぶと良い内容は、抽象基底クラスを作成するのに使う、abc.ABC型になります。この概念も一緒に勉強するのをオススメします。

Python環境を整備する

Pythonには豊富なライブラリがあり、「ライブラリを使ってみたい!」という気持ちが湧いてくるはずです。しかし、そのためには パッケージ管理の方法Pythonのバージョン管理 を学ぶ必要があります。実は、Pythonの パッケージ管理等を取り囲むエコシステムは年々変化 しており、これが初心者にとって難しく感じる一因になっています。そのため、他の言語以上に「環境構築の学習」は重要になります。

Pythonにはさまざまな環境構築ツールがあり、pip, venv, pyenv, conda, pipx, poetry, uv など、調べると次々と登場します。しかし、すべてを覚える必要はありません。

まず最初に conda については使わないことを強く推奨します。書籍やWeb記事で conda を勧めるケースもありますが、少なくとも私はにオススメしません。理由としては、Pythonの標準的なエコシステムと異なる部分が多く、余計な混乱を招くからです。

とはいえ、いきなりすべてのパッケージマネージャーを覚える必要はありません。まずは venv と pip の基本的な構成を1度経験することを推奨します。venv はPython標準の仮想環境機能であり、pip は最も基本的なパッケージ管理ツールです。

pip, venvという仕組みは最も原始的な仕組みでもあり、ここで得た知識は必ず今後環境をデバッグするにしても、エディタとPython間で問題が発生した場合でも、この知識を得ておけば対処できるようになります。

# 仮想環境を作成
python -m venv .venv

# 仮想環境を有効化
source .venv/bin/activate  # macOS/Linux

# パッケージをインストール
pip install requests numpy pandas

# インストール済みのパッケージ一覧を保存
pip freeze > requirements.txt

# 環境を再現する場合
pip install -r requirements.txt

これを経験した後に、uvという環境を使ってモダンな環境構築をしてみてください。少なくとも、2025年においてuvは優れた選択肢の一つだと考えております。

ライブラリを使ってみる

ここがPythonの醍醐味です。Pythonは様々なジャンルの豊富なライブラリをもつことです。本当に本当に色々あるので、たくさん使ってみましょう。matplotlib, pandas, scikit-learn, FastAPI など便利なライブラリは挙げればきりがありません。

ここまで学べば、「Pythonに抵抗がない状態」になっているはずです。最後に、初級者から脱却するためのロードマップを示しておきます。

脱初級者になるために勉強したほうが良い内容

ここからは、Pythonをより深く理解し、実務で活かせるスキルを身につけるための重要なキーワードを紹介します。Pythonを極めていきたい方は、ぜひこのあたりを勉強してみてください。

  • フォーマッター・リンターの導入

リンターを入れることで、def foo(x=[]) のような危険なデフォルト引数に対して警告を出してくれます。VSCodeなどのエディタと連携すると、さらに快適に開発できます。

  • with文やcontextlib.contextmanagerによるリソース管理

ファイルやネットワーク接続、データベース接続などのリソースを適切に管理するために with文を活用しましょう。

  • decorator・functools.wraps

デコレーターをつけることで、関数をリッチにすることできます。とても強力な機能になります。

  • 標準ライブラリ:argparse, datetime, time, re, pathlib, json, logging, math, itertools など

豊富な外部ライブラリも大事なのですが、標準ライブラリがそもそも強力であり、特に使われるライブラリの知識を習得することは重要となります。

  • 参照渡しとdeep copy, shallow copy

copyというものにはdeep copyとshallow copyというものがあり、Pythonはここを気にする必要があり、ここを知らないと予期していない動作をしているよう思えてしまいます。

  • テスト:pytest・assert

テストを書いてバグの少ないコードをつくるためにもpytestの導入をオススメします。

  • 型により安全にする技術:mypy, dataclass

型安全にすることで、とてもバグが発生しずらいコードを書くことができます。そのため、実行時エラーを起こさないようにするためにも、Pythonであっても型を導入することを「強く」オススメします。dataclassを使いこなし、コードからdictが少なくなっていくのが最初の目標になります。

  • debug環境:pdb, ipdb, IDEによるデバッグ

デバッグスピードと効率をあげることは大切であり、printデバッグから脱却した仕組みを学ぶととても便利になります。

  • threading, asyncio

高速化をするために必要な知識になります。threadやasync処理の仕方を学ぶとパフォーマンスを出すために必要な知識が得られるかと思います。

興味深いコミュニティ

色々な人がPythonに興味があるのがわかると、より勉強したい気持ちが高まります。そんなコミュニティの盛り上がりを感じられる場所をいくつか紹介させてください。

vim-jp #lang-python チャンネル
Vimのためのチャンネルのはずなのですが、Vim以外にも色々な技術の話が飛び交う勉強になるslackコミュニティになります。この中に #lang-python チャンネルがあるので、Pythonに興味深い方にオススメします。

vim-jp.org

PyConJPの登壇動画
PyConというPythonのConferenceがあるのですが、その登壇の動画はこちらに上がっており、高度な内容もたくさん上がっていることから、Pythonに対する知見強化によいサイトだと思っています。

www.youtube.com

最後に

このように長々と、Pythonという言語の学習ロードマップを書いてみたのですが、誰かの参考になると幸いです。

Pythonという言語は、スクリプト言語であることからも、すぐに試せるという面白さがある言語になります。AIがどんどん普及に従って、Pythonはより我々と身近な言語になっていくでしょう。

そんなときの足がかりになれば幸いです。