DockerやGit などのPythonの世界でよく聞くツールは何者か

こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。

前回、環境の整え方についてお話しました。

自分でスクリプトを書けるようになったときに、サードパーティ製ライブラリを使う機会が出てくると思います。それ以外にも、聞いたことが無かった単語を聞く機会も出てくると思います。

今回はPythonの世界でよく出てくるものについてお話したいと思います。

サードパーティ製ライブラリとの付き合い

PythonにはpandasやStreamlitをはじめとする様々なライブラリがあります。それぞれ、とても便利なものですが、適切なライブラリを見つけられるかどうかが問題です。

検索したり、人に聞いたりして探すことが多いと思いますが、最近ではChatGPTなどのAIに条件をつけて聞くと、いくつかの候補を出してくれますので、以前に比べればライブラリの選定がしやすくなったように思います。そして、それでも見つけられない場合には、自分で作るという選択もありだと思います。

とはいえ、標準で使えるものや、多くの人が使っているような人気のあるライブラリを選定した方が、メンテナンスもされていますし、ライブラリに関する情報が多いので、できるだけ既存の人気ライブラリを使用することを前提にしたモジュールを作って使えるようにする事が多くなると思います。

より便利にPythonプログラミングするためのエディタとの出会い

そして作ったものを、自分の世界だけで終わらせず、みんなに使ってもらいたいと思うのであれば、配布するという選択肢が出てきます。この時、配布する前に、今あるものを、より良いものにしたいと思うと思いますが、その時に使えるツールもたくさんあります。

例えば、開発するときに使うエディタ(IDE)です。前回の環境構築の話の中で、VSCodeやPyCharmを紹介しましたが、これらのエディタを使いこなすことで、開発の速度を速めることができます。

エディタの中には、コードの生成を助けてくれるGitHub Copilotなどの生成系AIツールが使えるようになっているものや、レポジトリによる履歴管理機能がついているものもあります。

最近はこれらの機能を活用する人が多く、もう常識と言ってもいいほどには利用されています。

Pythonのプログラミングでも欠かせないGit

さて、こうしたツールを使っていく中で、Gitという言葉が最初に出てきます。

プログラミングの中で、コードの差分をちゃんとわかるようにしたり、適切な単位でまとめて後から見やすくしたり、元のコードに戻しやすくしたりするなど、コードを適切に管理するバージョン管理システムと呼ばれるものがよく利用されます。

特にこだわりがなければバージョン管理システムにはGitを利用するプロジェクトが多く、もはやデファクトスタンダードな存在です。

ただ、Git自体は便利ではあるものの、使うのがとても難しいツールで、入門だけでも結構大変です。正直、私自身もGitを100%理解できておらず、やりたいことを都度調べながら進めています。

Gitを完全に理解するのは難しいので、完全に理解するよりは、コミットやプッシュ、プル、チェックアウトなどの基本的な動作だけは使えるようにするところからスタートするので問題ありません。

ところで、私は普段、ターミナル(CUI)からGitコマンドで操作していますが、VSCodeやPyCharmなどにはGit Extensionsがありますので、Gitのコミットやプッシュなどの様々な操作をGUIですることができます。特にコマンドラインにこだわる必要はありませんので、まずはGitに触れてみるというのが大切です。

Gitをより便利に利用するGitHubとは?

Gitはローカルのレポジトリだけで完結できますが、どこかにコード共有やバックアップ用のセンターサーバが必要になります。そのときに活用されるのがGitHubです。Gitをホストしてくれるサービスはたくさんありますが、GitHubが代表格と言えるほどにはデファクトスタンダードとして利用されています。

ところで、GitHubには、プルリクエスト(GitLabではマージリクエスト)などの様々な機能を提供しています。それらの様々な機能を上手く使いこなせると、履歴管理やバックアップを取ることができます。

例えば、開発の環境を整え、作るものが決まったら、GitHubにレポジトリを作って、そのGitHubをセンターサーバとして利用し、オリジンとして使って開発の中心を進めるとします。さらに、そこからプルしたり、コミットしてプッシュしたりということをやっていくのが開発のよくあるサイクルです。

この文章だけでも、知らない言葉がたくさんあるかもしれませんが、すべてを覚える必要はありません。覚えてほしいのは一連の開発の流れや、使い方であり、それらを検索するなりして理解をより深めていくことが大切です。

人気のDockerでPythonで作ったアプリケーションを公開する

さて、開発の段取りができて考えたいことは、どう他人に見てもらうか、配るかです。

例えば、Webサービスの世界であれば、ホスティングなりを使ってWebサーバを準備します。

このホスティング先にも様々あり、自分でサーバを借りるパターンもあれば、仮想サーバを使うこともあります。最近はLinuxなどのサーバを準備するより、別のホスティングの方法をとることも増えています。

さて、最近人気の技術に、コンテナ型の仮想環境であるDockerがあります。これは、アプリケーションの開発や実行を簡単にすることができる技術です。Dockerのコンテナを使いこなすには、ある程度の仕組みを覚える必要があります。

Dockerは既存のイメージを取得し、取得したイメージの中に作成したアプリケーションを少しだけ入れれば、起動できるという仕組みになっていますので、とても簡単にアプリケーションを使えるようにできます。

Pythonで作ったアプリケーションを、Dockerで動かしたい場合には、Python公式が用意したDockerイメージを持ってきて、中にアプリケーションを適切に入れて起動コマンドを書けば動かせます。

もちろん、新しいイメージを自分で作ることも可能ですが、仕組みを考えると難易度はとても高いです。

ですが、先ほどのGit同様、Dockerもとても奥が深い世界なので、すべてを知ることは難しいものではありますが、ひとつずつ試して経験を積んでいけば、自分でもイメージを作ることはできるようになります。

さて、そんなDockerですが、最近、AWS FargateやGoogleのCloud Runなどの様々なクラウドサービスで、Dockerを使ってPythonのアプリケーションを起動できるようになりました。

例えばCloud Runでアプリケーションを利用してもらうには、Dockerにプログラムを入れて、必要な設定を行うことで、URLが付与されて外部から接続できるような仕組みになっています。

ちなみに、もし、URLを自分の独自ドメインにしたい、セキュリティはこうしたいというものがあるなら、Pythonのスクリプトを作る世界から、さらに1歩先に進んで、クラウドのいろんな仕組みを知る必要がありますし、インターネット周り(DNSやポートなど)などの様々な分野の知識が必要になってきます。

いったいどれほど学べばいいのかと思うくらいには学ぶことが多い大変な世界ではありますが、昨今はツールがたくさん揃っていますので、うまく活用することで、以前に比べて簡単に実現しやすくなっています。

そして、Dockerの技術を上手くつかうためにGitHubをうまく活用する、という世界もあり、それぞれのツールがどういった連携をしているのかが見えにくい時代ともいえます。大変だとは思いますが、ひとつずつ、技術を見つめて、概要を捉え、それぞれのツールがどの範囲で効果を発するという事を知っていく必要があります。

Pythonで開発したものをWebで公開するほかの方法

他にも作ったPythonプログラムをWebで公開する方法がたくさんあります。

WebでPythonを動かすということはPythonが動くサーバをどこかに作る必要性があります。

例えば、Pythonを起動して動かせるクラウドサービスのルールに基づいて設定ファイルを書けば、複雑な設定をしなくても、GitHubと連携させて自動的に設定してもらい、ホストしてもらうことができるものもあります。

それに対して、静的サイトにする静的サイトジェネレーターや、以前紹介したWeb UIフレームワークの中には、HTMLやJavaScriptの技術を使ってホストできるような仕組みを持つものがありますので、Pythonのサーバを用意せずとも、HTMLやjsファイルを適切におけば、そのままブラウザで動かすことができるというものもあります。

技術は日々進化しています。すべてを追いかける必要はなく、自分のできる範囲をひとつずつ増やしていくと、だんだん、どの方法で楽にできるのかというのがつかめるようになります。

そして、サービスなり、技術なり、様々な組み合わせをすることで広がっていく未来があり、それによって自分が作ったものを動かせる仕組みも多数あることを知っておいて欲しいと思っています。

作ったPythonプログラムを、Web以外で公開するには

さて次に、自分が作ったものをWeb以外で活用する方法です。

機械学習やディープラーニングなどで作ったモデルや、ライブラリを誰かに使ってもらいたいとき、データのパッケージングの仕方にはいろいろあります。

Pythonのパッケージを作る方法を学んだあと、どこかのサーバにおいたり、送付したりといった手段で配布するという方法があります。ただ、PythonにはPyPIというサイトがありますので、ここにUPしてダウンロードしてもらうという手法が多くなります。ここ以外にはGitHubにソースコードを公開して使ってもらうという事もできます。

段階にはさまざまありますので、どの方法が正解というものはありません。知っておかなければならないのは、ここまでやれたらこういうことができるよね、ということです。

PyPI自体は、誰もがパッケージを配布できる場として存在していますので、登録方法を学んで上手く活用すればいいと思います。

ディープラーニングのモデルの場合は、容量がとても大きくなってしまうことが多くなります(100メガ単位やギガ単位)。なので、昨今のAI系の主流ともいえるHugging Faceという、AI版のGitHubレポジトリのようなサービスがありますので、そこに置くこともできます。

もちろん、Hugging Faceも、使いこなすには学ばなければなりませんが、そうハードルは高いものではないと思います。

ちなみに、Transformersなどをやっている人は、実はよく、Hugging Faceのモデルをダウンロードしていたりします。 気づいていなかったけれど、実は使っていたというケースはディープラーニングに関わる人にとってはよくあることだったりします。

さいごに

このコラムの中だけでも、出てきた言葉はたくさんあります。それぞれが何かの役割を持っているからこそ、みんなが標準的に使っていくようになったものばかりです。

そういえば、私自身も疑問に思っていることではあるのですが、ベテランのエンジニアたちが新しいものに対する知識をすぐ得られるのはなぜでしょうか。

例えば、バージョン管理システムと呼ばれるものは以前からありましたが、Gitが使われるようになったのは15年ほど前からです。そして、Dockerが出てきたのは10年前で、本格的に使われるようになったのは7、8年ほど前です。さらにHugging Faceはこの数年ほどでデファクトスタンダードになっています。

確かに長く使うほど、どんどん上手に使いこなせるようになると思います。ですが、なぜ新しく出てきたものをすぐに使いこなせるのか…。

恐らくですが、ベテランか否かというのは実は関係なく、ひるまずに挑戦したり、知っている範囲が広かったりといった理由で、新しいものにもすんなりと取り組めるような土壌ができているのだと思います。

例えば、コンテナベースで簡単にホストできるCloud Runが出てきたのは、5年ほど前だったと思いますが、Dockerを知っている人はCloud Runを少しの情報ですぐに理解できたはずですし、自分に関係のないものだと思った人は知らないままです。

世の中にはいろんなサービスがありますが、まずは、その中からちょっとでも興味を持ったものに飛び込んでやってみてください。もちろんくじけるシチュエーションはあります。ですが、ちょっとそれを使ってみたいなというところからスタートするだけでも、モチベーションになりますし、挫折しながらも少しずつ進めていけると思います。

そうしたことを繰り返していくうちに、仕組みをとらえるのが上手になり、様々なツールに詳しい人になり、たとえ苦手分野だったとしても上手に知識を得ていけるのではと考えています。

私自身、新しいものをやる時には、先人の知恵を借りますし、おすすめのドキュメントを読み込みます。無い時は公式サイトやブログを探して読み、ChatGPTに質問することもあります。ひとつずつ疑問を解決して、理解を深めて、次の段階に進んでいくことを繰り返しています。

ちなみに情報を上手く得られるのは、ちょっと流行ってて、みんなが学習を終えたくらいです。

例えばHugging Faceはまだ学んでいる段階の人が多いので情報が少ないので、どうしても使いたいというのではない限り、初心者にはまだおすすめしません。

そしてWeb UIフレームワークは実は今学習するのがおすすめです。ちょうどブームだというのもあって、今勉強すると新しい情報がどんどん入ってきます。

誰かの後について学習するというのは悪いことではなく、とてもおすすめです。ぜひいろいろなツールに興味を持ってもらえればなと思います。

ところで、前回はおすすめ環境についてお話しましたが、PyCon JP TVで開発環境の整え方ライブデモ動画を公開しました。ちょっと後半は飲んだくれてますが、前半の1時間ほどで解説していますので、興味がある方はぜひご覧頂ければと思います。

https://tv.pycon.jp/episode/39.html

PAGE TOP