• 一般社団法人Pythonエンジニア育成推進協会 顧問理事 寺田学氏

    著者:寺田学
    一般社団法人Pythonエンジニア育成推進協会 顧問理事

一般社団法人Pythonエンジニア育成推進協会(以下、当協会)の顧問理事の寺田学です。私は試験の問題策定とコミュニティ連携を行う立場です。

私は初学者に教える機会が多く、大学や企業研修で教えていると、よく本やネット上にあるサンプルコードが動かなくて困っているという話が出てきます。なぜサンプルコードが動かないのか。その原因の多くは「動作環境」にあります。そこで今回はサンプルコードが動かない時の対処法や考え方についてお話したいと思います。

Python初学者と環境づくり

このコラムでもこれまでに何度か環境づくりについてお話してきました。環境づくりはプログラミングの世界において非常に重要なものですが、初学者にとってはなかなか大変で、ステップアップする上で重要な課題の一つと言えます。とはいえ、最近ではネット上から情報が得やすく、また、データ分析や機械学習などで使える環境が一通りそろった Google Colaboratory などの便利なサービスが出てきていることもあり、環境の整備は以前に比べればやりやすくなっている面はあります。初学者がPythonの学習初期から無理して環境づくりの学習に乗り出す必要はありませんが、色々なパターンの環境をうまく作れるようになれば、より学習が進みますので、折を見て環境づくりも学習して理解できるようになってもらえれば、ということをまずはお伝えしておきます。

サンプルコードが動かない一番の理由は「環境」

前述の通り、初学者の多くが書籍やネット上にあるサンプルコードを参考にプログラムを書く、もしくはサンプルコードをそのままコピペして試していると思いますが、実際にやってみるとうまく動かないというケースに当たったことがあるのではないかと思います。サンプルコードが動かない原因の多くは環境の問題がほとんどです。

書籍であれば「こういう環境で作っています」といった注意書きがあることがほとんどですが、ネット上にあるコードではそれがないケースも当然あります。しかし、そのコードが動く前提である環境と異なる環境で動作させれば、当然動かない可能性はあり得る話です。

ここで言う「環境」とは、動かしている環境そのもののことだけでなく、たとえばPythonのバージョンやOS追加パッケージのインストールの有無など、ちょっとしたことが要因になっていることもあります。そうした要因をどう回避するのかと言えば、まず一番は書籍に書かれている手順のとおりの環境を自分で用意するという事が必要です。

このとき、最初に出てくる課題はOSの種類やバージョンの問題で、すべて同じ環境で整えられるのかという点です。そのため、まずは書籍を購入する際に、自分がその書籍に環境を合わせられるかどうかを一つの指標にしてみるのは良いのではないかと思います。そして慣れていくうちに、書籍と違う環境でも同じように動作させるにはどうすればいいかというコツをつかめるようになります。

たとえば、コードの中に環境依存のものがあれば、どの部分をどのように変えれば自分の環境でも動かせる、といった見当がつけられるようになるということです。私はよくDockerというコンテナ技術を使ってPythonを動かすことがありますが、Dockerで動かすためにはどう変えればいいのかということはサンプルコードを見て、少し調べればすぐにわかりますので、つまずいたら調べてみてください。

ベテランのエンジニアにサンプルコードを見てもらうと、比較的簡単に説明されることが多いため、意味が分からないと感じてしまうこともあると思いますが、環境づくりやインストールの経験を重ねていくうちに慣れ、理解できる時期が必ずやってきます。とはいえ、最初から環境を作ることに注力してしまうと大変なので、最初のうちはなるべくサンプルコードの提供元が出している条件に合わせた環境で行うのがおすすめです。どうしても同じ環境にはできないけれど試してみたいという場合には、誰かにサポートしてもらいましょう。

使っている環境は人によってどうしても異なりますし、全く同じ環境を毎回用意すること、そして、環境が違う時に何が起きているかを見定めるのは本当に難しい問題で、このコラムでは書ききれないほどです。なんとか、めげずに経験を積んでいってもらえればと思います。

ライブラリのバージョン違いによる動作不良の可能性も

ここまで、サンプルが動かない時の代表例として環境による違いをお話しました。次に問題となるのは稀なケースではありますが、厄介なのがライブラリのバージョン違いによって起きる問題です。もちろん、書籍にあるバージョンであれば保証されているので問題なく動くはずですが、もし動かなかったとすれば書籍が間違っているか、何かが変更されたか、自分が間違っているといったことになります。

大体の有名ライブラリであればネットで検索すると大抵理由がわかります。検索のコツは、「エラーメッセージ」の一番下のメッセージには様々な情報が含まれているので、このエラーメッセージで検索すること、そして、ライブラリ間で起きている問題がないか把握するためライブラリの名前も入れてみましょう。(検索例:import error numpyなど)

英語のサイトも含めて調べれば何かしらの情報が出てくるはずです。もし、出てこないのなら、自分が書いたプログラミングコードが間違っている可能性を考えてみてください。また、出てきてもその対処法が全て書かれていないことや、その内容をなかなかとらえきれないこともありますので、丁寧に読み解いていく必要があります。そうしていくうちに、ライブラリのバージョンによって変わったポイントを把握できることもあります。

私の場合は、最終的にリリースノートやGitHub、公式のドキュメンテーションを見て、仕様の変更を確認します。とはいえ、調べていくのはとても大変で、公表されている情報は英語のサイトが多く、必ずしもピンポイントで調べられるものでもないため、深追いしすぎないほうがいいとは思います。

Python2で書かれたコードではないか確認してみよう

実はPython2で書かれたサンプルコードがいまだネット上にたくさん存在していますが、Python2で書かれたものがPython3で動くかは保証されていません。Pythonの現在の最新バージョンは3.11が出たばかりで、翌年の10月には3.12が出る予定です。Python3.x代であれば、よほどのことがない限り、動かないということはほぼありません。ただ、ライブラリがインストールや利用できるかはその限りではありません。Python3.6ではインストールできたライブラリがその次のバージョンではインストールできなくなることもあれば、その逆もあり得ます。

PythonはPython2が長らく現役で提供されてきましたが、2020年に最後のメンテナンスを終えています。しかし、いまだにPython2で書かれたサンプルコードは数多く公開されており、中にはちょっとマニアックなサンプルコードもありますので、使いたいと思う人はいると思います。ただ、Python2とPython3、それぞれの経験がない人がPython2で書かれたコードであるかを見極めるのは難しいですし、Python3に直すのも困難なので、基本的には捨てるしかないと思います。どうしても使いたいという場合にはわかる人に直してもらうしかありません。

直してくれる人が見つからず、自力で何とかするしかないのであればPython2. 2to3というライブラリを使用してみましょう。日本語訳された解説ページがありますので、それを見てめげずに直していくしかありません。Python2の見極めポイントとして2つご紹介しておきますと、一番簡単なのはprint文です(Python3はprint関数)。もう一つはimport文ですが、これはライブラリの配置換えが行われたことが影響しています(例:urllib2、StringIO)。

それでもどうにもならなかった場合、見つけたサンプルに固執せずに違うものを見つけるか、書籍にあるものならまずはバージョンをなるべく合わせてやってみましょう。もしどうしても使いたいというなら、QAサイトで聞くというのも一つの手です。ただその際は機密情報に注意して、出せる情報の範囲を考えて調整してください。

さいごに

たとえば、母国語が日本語の人が英語を学び、海外に行っても問題なくコミュニケーションを取れるほどの英語を身につけるには高いハードルがあります。何が合っているか、間違っているかというのはわかる人にはわかりますが、そこに行きつくには多くの時間と学習が必要で、一気にそのレベルに到達できる人はそうそういません。世の中には勉強が得意な人、不得意な人、向き不向き、努力型などいろいろなパターンの人がいるわけですが、結局のところ誰かと話す、文章でやり取りをするといった実践を繰り返すことによって学ぶ方がより早く身につく可能性が高くなります。

これは、料理においても同じようなことが言えます。本や動画だけで同じ料理を再現できる人もいれば、上手に作れない人もたくさんいます。先ほどの環境の話と同じで、全く同じもの、同じ環境というわけではないからです。そして、難易度によって影響が出ることもあると思いますが、基本的には日々の経験や積み重ねで少しずつ改善していくことで、自分なりのものができていくものだと思います。もちろん、プロになるにはステップアップのための何かが必要だと思いますが、誰かに食べさせられるものを作るという意味では日々のトライ&エラーでそれなりのレベルには到達できるはずですし、全く同じものはないと考えて様々な参考書や動画を見てもらえればと思います。

プログラムが動く、動かない。言葉が通じる、通じない。料理が美味しい、美味しくない。それぞれの仕切りはちょっとずつ違いますし、さらにプログラミングはエラーか動くかのどちらかで、何となく動いて、何となく回答が返ってくるというものではなく、むしろそのようなものを作るのは難しいものです。

プログラミングは正確なものができるか、動かないか、結果が違うものが返ってくるとなりがちのため、難しいと考えられてしまうようですが、逆に言えば動くようになれば適切なものが返ってくるので、ほかに比べて再現性を高められます。

結局のところ、経験値がものを言う部分があるため、トライ&エラーを繰り返しながら学んでいくことが大切です。一緒に学ぶ人や師匠を作ることでより学習しやすくなると思いますのでぜひ交流を広げていってください。そして、頑張って何かを習得するという事はとてもいいことだと思いますので、ぜひいろいろとチャレンジしてもらえればと思います。

当協会の最新情報は公式サイトか、公式Facebookページでご覧いただけます。FacebookページではPythonに関連したニュースもお知らせしていますので、ぜひフォローしてみてください。また、YouTubeチャンネル「Pythonエンジニア認定試験」では、私が試験概要や学習のコツをお話ししたものや、合格した方のコメント動画を公開しています。こちらもぜひご覧ください。

[PR]提供:Pythonエンジニア育成推進協会