一般社団法人Pythonエンジニア育成推進協会(以下、当協会)の顧問理事の寺田学です。私は試験の問題策定とコミュニティ連携を行う立場です。
開発環境を作る際、どこに作るか、どういう構成にするかというのは誰しもが悩む問題です。また、実行した結果となるファイルがどこに保存されたのか、画像ファイルやPDFを作ろうとしたときに必要なファイルがどこに存在するかわからなくなったと困っている人もよく見かけます。そこで今回は、開発用のローカル環境や生成したファイルの保存フォルダについて、どう対処していくか、ファイルの管理の面で何を心がけるかといった点についてお話したいと思います。
ファイル保管で知っておきたいOSごとの違いについて
ほとんどの人がWindowsやMac、LinuxといったOSで動く環境を利用していると思いますが、まずこれらの構造について知っておかなくてはならない前提知識があります。
OSで違うファイルシステムのパス構造
たとえば、WindowsとMacではファイルシステムの構造が大きく違うため、パスの指定が異なります。一方、LinuxとMacはもともとPOSIXと呼ばれるUNIX体系から来ているため、基本的なファイルシステムの構造は同じです。ちなみに、それぞれのシステムで利用される用語として、ディレクトリとフォルダという言い方がありますが、その意味するところは厳密には違う部分はありますがほぼ同義で、同じような意味で使われていることがほとんどです。
Windowsはこれまでの歴史的な経緯から、「C:¥」から始まるディレクトリ構成になっており、今でもCやDから始まるドライブ名での呼び方になっています。日本語のWindowsではディレクトリの区切りは「¥マーク」で表されますが、システム的には「バックスラッシュ」で管理されています。ちなみに、なぜ日本語版のWindowsで「¥」が利用されているのかと言えば、過去に決められた文字コードの指定の問題が影響しているためです。
さて、一方のMacやLinuxのようなPOSIX系は先頭が「/」から始まり、ディレクトリの区切りも「/」で管理する仕組みになっています。
OSによってホームディレクトリがある場所も違う
どのOSにおいても、ユーザーがログインした直後に表示され、主に使用するディレクトリのことをホームディレクトリと呼びます。このユーザー名がついたフォルダはどんなシステムでもどこかに存在していますが、ホームディレクトリが作成される場所はシステムによって異なります。たとえば、Windowsなら「C:\Users\ユーザー名」で、Macは「/Users/ユーザー名」といった形です。
これらはWindowsではエクスプローラー、MacだとFinderで確認できます。日本語のOSの場合、実際は「Users」という英語名でフォルダが作られていますが、エイリアスとして「ユーザー」のように日本語で表示される場合があります。表示上は日本語になっていても実際のシステム上の管理は英語表記であるケースがよくあるため、パスの指定の際に間違いを生みやすく、注意が必要です。
ちなみにLinuxを日本語環境で構築した場合、こちらもまた日本語で表現されているケースがありますが、実際に日本語のフォルダ名が作られている場合があります。パスを指定する際はカタカナ表記ではなく、元の英語で書かれている名前を指示しないと上手くいかない場合があるということを覚えておきましょう。
ファイルの保管場所のおすすめ
ホームディレクトリの中はユーザーが自由に使うことを前提として作られているため、ユーザーは色々なファイルを保存し、展開していると思います。すでにホームディレクトリにデスクトップというフォルダがあったり、ダウンロードのフォルダが最初から設定されていたりというケースがあると思いますので、それをそのまま使っていくのもいいのですが、おすすめはホームディレクトリ配下に英語名のフォルダを別で作ることです。
名称の付け方は好みもありますが、私がよくつけるのは「work」、「projects」、「dev」、「tmp」というような、長くはないものの、判別しやすい名前を付けるようにしています。たとえば、開発用の「dev」フォルダ内に、プロジェクトや顧客、案件名などの名前を付けたフォルダを追加し、その中に関連する開発環境や、必要なデータを保存するようにしています。(例: /Users/xxx/dev/projects1内に.pyやnotebookなどのファイルを配置)
こうすることでコマンドプロンプトやターミナルを立ち上げる時に、ホームディレクトリを開くような設定にしていればすぐにそのフォルダにcdコマンドで移動できますし、エクスプローラーやFinderから見ても、すぐにそこにたどり着くことができます。
作業用フォルダ名と保存方法について心掛けておきたいこと
フォルダ名に日本語が入っていると、ターミナルなどで指示しにくく、留意しなくてはならないことが増えますので、できるだけ日本語を使わず、アルファベットや数字で表現するようにしましょう。
また、関連する作業はすべてその中で作業すること、そして実行した結果もそこで完結するようにしておけば、ほかのフォルダにファイルが行かずに済みますし、すべてをそこで展開できるようになります。その結果、データへの到達が速いのはもちろん、何かを複数手掛けていたとしても整理が容易にできるので便利ですし、データも探しやすくなります。とはいえ、ファイルの管理方法や整理方法は人それぞれ好みがありますので、自身の管理し易い方法を探してもらえればと思います。
Pythonでディレクトリを扱うなら「pathlib」を使おう
以前であれば標準ライブラリにある[os.path]モジュールで処理をしていましたが、バージョン3.4で追加されたpathlib というパッケージがありますので、現在はそちらを使うことを強くおすすめしています。
このパッケージにはパスを表すオブジェクトがいくつかありますが、まず覚えてほしいのはPathという抽象化された[from pathlib import Path]というクラスです。Path(“.”) のようにこのクラスにドットをあたえると現在実行しているPythonのカレントディレクトリのパスを取得することができます。
また、pathlibを使えば、パスの移動や別のパスを生成するといった作業も簡単にできるようになります。pathlibはスラッシュ演算子を持っているため、パスの区切り文字に「/」が使え、直感的にフォルダの移動や、ファイルの作成場所などの指定を容易にできるので、とても便利です。
さきほどWindowsとMacではディレクトリの構造が違うことを書きましたが、pathlibを使えば同じような操作で様々なことができるはずです。ドライブ名まで決めて、もしくは、ディレクトリの指定を「C:¥Users」からどうしても始めたいという場合はpathlibだけでは解決できないかもしれませんが、ホームディレクトリの取得や現在のディレクトリ名の取得、区切り文字が「¥」や「/」のようなOSによって違うものも全て「/」で表現できますので、pathlibによって解決できる部分が多くあります。
どうしても解決できないものはWindowsかPOSIX系かをpathlibで調べたうえで、if文で分岐させることもできますが、基本的にpathlibを使えばほとんどの場合で様々な環境で動かしやすい形にプログラムを組むことができます。
さいごに
ディレクトリの概念やPythonのパスの考え方の違いといった基本を理解できないままでは、いつか悩むことになります。だからこそ、OSごとに異なる基本的なディレクトリ構造などの前提条件の知識を身につけておく必要があります。
PCで何かを開発したいなら、PCのことを多少なりとも知っておかなければ、PCに対して適切な命令を与えられません。というのも、普段プログラミングしているとGUIではなくCUIで操作するシーンが結構出てきます。CUIはGUIほど便利な機能はないので、だからこそPCのことを知っておく必要があるということです。
また、OSのディレクトリに関する処理はpathlibを使えば大抵の課題は解決できますが、作業用のフォルダはメインとなるフォルダをデスクトップではなく、ホームディレクトリ配下に作り、構造化させておけば様々な処理を行う時に利便性が高まり、よりやり易い環境になると思いますので、試行錯誤してもらえればと思います。
[PR]提供:Pythonエンジニア育成推進協会