記事に書いてある通りにやっているのにエラーばかり出る原因とは? #Python
こんにちは、OguLinks代表の小倉(@jun_ogulinks)です。
技術系の記事に書いてある通りにやったけど全然うまくいかなかった…
という経験はありませんか?
Pythonに限らずプログラムを作ろうと思ったとき、自分で0から作るより誰かが作ったものを参考にして作り始めた方が効率が良いことがあります。
プログラミング初心者にとっても取り組みやすいやり方だと思います。
ですが、
「記事通りにやってもエラーが出て先に進めない…」
という声をよく耳にします。
いったい何が原因なのか?
直近で2件、この内容の案件について対応をしたので個人的な考察をしたいと思います。
※思ったより長い記事になってしまいました…(;^ω^)
1. 読者と記事のどちらにも原因がある可能性
「書いてある通りにやってできないのは記事が悪い!」
と決めつけるのは早計です。
まずは無料で技術記事を公開している方々に感謝しましょう。
(無料で情報くれているのですからノークレームがマナーですよ?)
とまあ、いきなりそんな風に怒る人はいないと思いますが、記事に書いてあることがうまくいかないのは双方に問題がある可能性がありそうです。
また、問題が起きても自ら解決してどんどん進めることができる人とそうでない人がいます。
こういった違いはどうして生じるのか?
個人的には、読者と執筆者のすれ違いのように感じます。
例えば、
(執筆者)これはみんな分かっていることだろうから省略するか…
(読者)次のステップに行くまでの手順がわからないのだが…
(執筆者)Pythonのバージョンはこれ使ってね(重要だよ)
(読者)<読み飛ばす(バージョン情報は二の次)>
(執筆者)Visual Studioのビルドツールが必要だからインストールしといてね!
(読者)え?Pythonじゃないの?何それ?
あまり良い例が思い付きませんでしたがこんな感じです。
何となく分かっていただけるでしょうか?
また、多くの方が主に以下のようなサービスから技術情報を得ているかと思います。
Qiita
Zenn
GitHub など
GitHubは記事という部類には入らない?かもしれませんが、情報元としてはよく利用されています。
他にも国内外のプログラミング関連に特化した質問サイトなども良く利用されます。
ZennやGitHubに投稿するような方はレベルが高いと個人的には感じていますが、Qiitaは色々なレベル感の人がたくさんいる印象を持っています。
一口にレベルと言っても様々なものがあって、例えば、
単純に技術的な能力値が高い人
人に説明する能力値が高い人
わかりやすい文章を書ける能力値が高い人
と様々です。
いずれにしても上記サービスでプログラミング始めたての人を対象にした記事はほぼありません。
そうなるとプログラミング関連の知識がほぼ皆無の医療系や福祉系の人が「プログラミングやるぞ!」と言っても結構ハードルは高いのかなぁとも感じます。
私の様に医療系であっても好き好んで自らプログラミングをやってた人間からするとそうでもないのですが、やはり本当に最初の頃は苦戦していたような記憶があります。
※ 私の場合は適性があったらしく割とすんなりいきましたが… ^-^;
余談が長くなってしまいました、すみません…
「記事に書いてある通りにやっているのにエラーばかり出る原因」の本題に入っていきましょう。
2. 読者側に問題がある場合
2.1. 読者が、記事が想定している読者レベルに達していない可能性がある
プログラミング関連の記事には大まかに
入門者・初心者向けの教科書的記事
(逆引き含む)辞書的な記事
基礎はできている前提の実践的な記事
といった感じに分けられるかなと思います。
この記事で対象としてるのは3つ目の「基礎はできている前提の実践的な記事」です。
つまり、そもそもプログラミング始めたての人を対象にしていません。
しかし、
「その記事に書かれていることをやりたいんだよ…」
という声が聞こえてきそうです…^^;
おそらく多くの初心者は書かれている内容をほとんど理解していないで、ただ「書かれていることだけ」やろうとするのでエラーが出ても「何のこっちゃ?」となってしまうわけです。
入門書に応用が書かれていないのと同じで、応用書に基礎が書かれていることはあまりないですよね?
書かれていないけどやらなきゃいけないことが初心者には分かりません。
この時、わからない部分を徹底的に調べて自己完結できる人は強いです。
それができない人や時間的な制限で難しい人は、わかる人に聞いた方が早いでしょう。
医療・福祉・心理といった人たちはエンジニアではありません。
私のように「プログラミング楽しい!」という人は別ですが、そうでなければ
あくまで「エンドユーザー」という立場
で、プログラミングに関わっていくスタンスで良いと考えています。
2.2. 記事が想定している実行環境を読者が整えていない可能性がある
私がこれまでに仕事を受けた依頼主の方々のほぼ全てがAnacondaを使っていました。
もちろん私も使っていますが、Pythonで仮想環境を管理する上で非常に使い勝手の良いものであることは間違いありません。
そう、Anaconda(厳密にはAnaconda Navigator)とは
Pythonの仮想環境を管理する
のがメインです。
もちろん他にも色々な機能はあります。
本来pyenvなどを使ってコマンドラインで仮想環境の作成やアクティベーション・仮想環境の切替などするところを、基本的に全てマウス操作でできてしまうのはとても楽です(コマンド覚えなくていい)。
そうなんですがっ!
Anaconda使っているにも関わらず、その使い方までちゃんと知っていたのはほんの一握りの人だけでした…Σ(゚Д゚)
さて、仮想環境なんて細かいことは置いといて…という使い方をしていると何が困るのでしょうか?
一番困るのはbaseの仮想環境がぐちゃぐちゃになてしまうことです。
詳しい話をしていると長くなってしまうので割愛しますが、baseの仮想環境がぐちゃぐちゃになるとエラーの発生率は高まります。
仮想環境にインストールされているパッケージには依存関係というものが存在します。
「このパッケージのこのバージョンを使うためには、こちらのパッケージのバージョンをいくつにしないといけない」というようなものですね。
以前は問題なく動いたのに今は動かないという時には、その間の期間で別のプロジェクト用に入れたパッケージのバージョンによってエラーが発生している可能性があります。
そのため、原則プロジェクトごとに仮想環境を作るというのは経験者にとっては当たり前のこととなっています。
もし、仮想環境について今まで意識していなかったという方は、しっかりと専用の仮想環境を作成して実行することを心がけましょう。
できる限り記事と同じ環境にすることでエラーの発生率はぐんと下げることができます。
なお、私のブログでAnaconda Navigatorの使い方の一部を紹介しているので合わせて参照いただければ幸いです。
2.3. Python以外の周辺知識が不足している可能性がある
Pthonの記事の中にはPython以外の知識がないと目的を果たすことができないものもあります。
例えば、
CMakeでのmakeファイルの作成に関すること
Visual Studioのインストール関連
環境変数の設定について
バッチファイルの編集や操作について など
他にも色々ありますが、Pythonとは直接関係なくてもやらないと正常に実行できません。
やりたい内容によってやる必要のあるものと必要のないものがあり、プロジェクトごとに随時対応しなければなりません。
簡単なものであれば初心者でも対応できますが、「実はバッチファイルの中身を自分のPCの環境に合わせて書き換えないといけない」というのもあったりします。
皆さんできますか?
そもそもプログラミング初心者がPythonだけで手いっぱいなら別の言語のことなど頭に入ってこないんじゃないかと思います。
つい最近対応した案件では、「このバッチファイルを実行すればOK」と書かれている記事があり、それ自体は間違っていないのですが、実は中身を書き換えないと動かないというものでした。
というより、依頼主の方の使い方であればバッチファイル自体が必要なく、そのままPythonのファイルを実行すればいいだけでした。
こういったこともPythonしか学んでいない初心者には全く分かりません。
ffmpegなんかもそうですが、「インストールしておいてください」と一言書いてある場合がほとんどです。
しかし実際には
pipでffmpeg-pythonをインストールし、
ffmpeg公式サイトから実行ファイルをダウンロード(任意フォルダで解凍)する
解凍したフォルダ内のbinフォルダを環境変数に追加
と、ここまでしないと使えません。
Python以外の作業が出てきたときにも柔軟に対処できるスキルが必要ということですね。
2.4. 古いバージョンじゃないと動かないプログラムをGoogle Colabで動かそうとしている
私が最近かかわったものでこの見出しにある問題が発生しました。
先に言っておくと解決策はあります。
ただ難易度は上がります。
少なくとも初心者向けではありません。
Google ColabはPythonを始めたての人であれば結構使っている人が多いんじゃないでしょうか?
Google Colabはほとんど設定をしないで使えるので便利です。
私も多用しています。
そこで使っている人に質問です。
Google Colabで使われているPythonのバージョンっていくつだと思います?
Google Colabでネイティブで動いているPythonのバージョンは時代によって変化します。
この記事執筆時点では 3.10.12 でした。
そしてこの 3.10.12 上でPython3.7じゃないと動かないプログラムを動かそうとしたらどうなりますか?
当然動きません。
つまり、Google Colab上で動いているPythonのバージョンをダウングレードする処理が必要になります。
こちらも細かい話は割愛しますが、ダウングレードするとパッケージ管理するためのpipそのものも入っていないため、まずpipをインストールするところから始めないといけません。
pipそのものをインストールするということは、最低限必要な汎用パッケージすら入っていません。
全て自分で0から環境を構築する必要があり、Google Colabのもともとの恩恵を一部受けることができなくなってしまうのです。
しかも普通にコードを実行するとネイティブのPython(3.10.12)が動いてしますので、ダウングレードしたPythonで動かすためには通常と異なる方法で実行しなければなりません。
初心者にはハードルが高いです。
この辺りも知識としてして知っておかないと正解にたどり着くのは難しいでしょう。
3. 記事側に問題がある場合
3.1. Pythonやパッケージのバージョンが明示されていない時がある
大抵、技術記事には使用するPythonやパッケージのバージョンが記載されています。
比較的新しい記事であればよいのですが、数年以上前の記事を参照する場合はPythonやパッケージのバージョンについてより意識しなければなりません。
先に述べたように依存関係が成り立っていないとプログラムは正常に動作しません。
しかし、時々バージョン情報等が記載されていない記事を見ることがあります。
その記事が新しければいいですが、古い場合には動くバージョンを試行錯誤して見つけ出す必要があります。
玄人でもかなり骨の折れる作業です…(´;ω;`)ウゥゥ
そういったことは稀ですが、一つの原因ではあります。
3.2. 記事内容の正確性に問題がある
技術系の記事を書いている人は内容の正確性に不備がないように細心の注意を払っていると思います。
ですが、書いているのは人間です。
当然ミスすることもあります。
この場合は筆者に連絡を取るか、自力で解決するしか道がありません。
もちろん自力解決は初心者にとって厳しい戦いです。
そもそも記事のミスに気付けるかどうかがポイントになってきます。
ほとんどの場合、エラーが出て気付きますが、エラー内容を吟味できなければ一生エラーから脱出することはできないでしょう。
最近は生成AIにエラー内容を入れればそこそこ良い感じの回答をしてくれます。
生成AIで必ずしも全て解決できるわけではありませんが、一つの手段として使えるようにしておいた方がいいですね。
まとめ
結局のところ初学者には解決が難しい…
かもしれません(経験がものをいう)
最後のところで生成AIの活用についても言及しましたが、それでも解決できない場合はわかる人に聞いた方が早いです。
また、生成AIで出てきた回答を理解できるかどうかにもかかってきますので、回答内容を理解できそうもなければやはり人に聞きましょう。
そういったときの対応窓口もいくつか用意しておくと安心です。
私自身は個人事業(OguLinks)でそういった内容についても対応させていただいていますので、よろしければ候補の一つとして追加していただけると幸いです。