PHPエンジニアがPythonに初めて触れて感じたこと

PHPエンジニアがPythonに初めて触れて感じたこと

目次

    はじめに

    私はこれまで、主にPHPを使ったWebアプリケーションの開発に携わってきました。
    Laravelなどのフレームワークを中心に、ECサイトや管理システムなどのバックエンド実装を担当し、「PHPエンジニア」としてキャリアを積んできました。

    そんな私ですが、最近Pythonを業務で使う機会がありました。
    本記事では、PHPを中心に触ってきた自分がPythonに触れて感じた違いや戸惑い、学んだことをまとめていきたいと思います。

    コーディングで感じたこと

    コードのシンプルさ

    Pythonのコードを見たとき、まず感じたのは見た目のシンプルさです。
    インデントでブロックを表現するため、PHPのように{}でコードを括る必要がなく、情報量が減り読みやすいと感じました。
    一方で、インデントミスで動作が変わる可能性があり、常にコードのネストや書き方に注意が必要です。



    標準関数のわかりやすさ

    PHPの標準関数は命名や引数順が(個人的に)直感的ではなく、毎回ドキュメントを確認していました。 例えばPHPのstrpos()は「string position」の略ですが、初見では直感的とは言いづらいです。
    一方Pythonでは、同等の処理はstr.find()で記述でき、関数名の意味も直感的です。
    忘れることがなく、コードを見ただけで何をしているか理解しやすいのが良いと感じました。 こういった違いは言語設計の文化の差を感じる部分でした。



    型ヒントの活用

    PythonもPHPと同じ動的型付け言語ですが、型ヒントを積極的に記述する文化があります。
    pyrightなどのツールを併用することで、実行時には動作するコードでも型の不整合を事前に検出できます。
    コードが簡易的な仕様書のように機能し、レビューやリファクタリングもスムーズになるのが印象的でした。 PHPでも型ヒントはありますが、Pythonほど徹底されていない印象です。



    ライブラリの充実度

    Pythonはデータ分析や機械学習のイメージが強かったのですが、Web開発向けのライブラリも豊富です。 HTTP通信にはrequests(LaravelのHttpファサードに相当)、DB操作にはSQLAlchemy(LaravelのEloquentに相当)、マイグレーションにはAlembic(LaravelのMigrationに相当)など、PHPで使ってきたライブラリに対応する選択肢が揃っていました。
    piprequirements.txtで簡単に導入できますが、依存関係管理にはPoetryPipenvのようなツールが便利です。
    Composerと比較しても直感的で理解しやすく、使いやすかったです。

    開発環境の違い

    仮想環境の存在

    Pythonではvenvvirtualenvを用いてプロジェクトごとに独立した仮想環境を作成します。
    ライブラリやランタイムをプロジェクト単位で完全分離できるのは、PHPにはない文化です。 慣れると複数プロジェクトを安全に並行開発でき、とても便利ですが、初めのうちは感覚が掴めず苦労しました。



    バージョン切り替えの容易さ

    pyenvを使うことで、複数のPythonバージョンを簡単にインストール・切り替えできます。
    PHPでもDockerやサーバー設定でバージョンを固定できますが、ローカル環境でこれをシンプルに行えるのはPythonの利点だと感じました。

    PHP経験が活きた部分

    コードの書き方や開発環境の違いはあれど、PHPでのWeb開発経験が活きた部分も多々ありました。 「PHPの経験」と言うよりかは「Web開発の経験」が活きた部分が大きいかもしれません。

    • HTTPやWebの基礎: RouterやControllerなどWeb開発の基本概念は変わらず役立ちました。
    • DB関連の開発知識: ORMやマイグレーション、Seederなどの概念はLaravel経験がそのまま活かせました。
    • パッケージ管理の概念: Composerの経験があったので、pipPoetryの理解も比較的スムーズでした。

    つまずいたこと

    API用データモデルの概念

    PythonのAPI開発では、リクエストやレスポンスのデータ構造を型注釈で明示的に定義するのが一般的です。

    from pydantic import BaseModel
    		
    class UserResponse(BaseModel):
            id: int
            name: str

    このようなデータモデルは、コードがそのまま設計書兼スキーマとして機能するのが特徴です。 このようにデータモデルを利用することで、リクエスト・レスポンスの構造が明確になり、設計書のような役割も果たします。 バリデーションも行われるため、コードの信頼性が向上します。 このデータモデルを扱う感覚はPHPのAPI開発ではあまり馴染みがなく、理解するのに苦労しました。



    非同期処理(async/await)

    Pythonのasync/await構文は、I/O待ちを効率化し非同期処理を可能にする仕組みです。
    PHPでは非同期処理は一般的でなく、同期的に書くことが多かったため、理解するのに時間がかかりました。
    しかし、非同期処理の考え方は高トラフィックやAPI連携での性能改善に有効で、これからのWeb開発では重要になると感じました。 このタイミングで学べたのは良い経験でした。

    おわりに

    Pythonを業務で使ったことで、Web開発の基礎知識は言語が変わっても通用すると実感しました。
    一方で、開発文化の違いには学びが多く、技術の幅を広げるきっかけになりました。
    今後もPHP・Python両方の知見を活かしながら成長していきたいと思います。

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。