[Medical AI with Python: P8] 研究再現性のための整理術 — ファイル構造とターミナルの基礎

学習のポイント

優れた研究は、優れた整理術から生まれます。この章では、研究の再現性を高める「プロジェクトフォルダ構成の型」と、その準備を効率化する「ターミナルの基本操作」という、プロフェッショナルな開発の土台となるスキルを学びます。

再現性の確保
なぜ整理が重要か?

乱雑なプロジェクトは、後から再現できず価値を失います。優れた結果も、手順が不明瞭では科学的意味を持ちません。将来の自分や共同研究者のため、整理整頓の「作法」を身につけることが、研究の信頼性を担保します。

プロジェクトの「型」
推奨フォルダ構成

「入力(data)」「処理(src, notebooks)」「出力(results)」を明確に分離します。特に、元の生データ(raw)と加工済データ(processed)を分けることが重要です。README.mdで目的や手順を文書化し、誰でも理解できる状態を目指します。

ターミナルの活用
高速・自動化ツール

マウス操作より高速で再現性の高いPC操作を可能にします。mkdir, cd, ls等の基本コマンドで雛形を効率的に作成でき、サーバー操作にも必須のスキルです。

再現性の高い研究開発を支える2大技術
本講義の学習目標
再現性の高い研究のための、適切なプロジェクトフォルダ構成を理解する。
ターミナル(コマンドライン)の基本的な役割と重要性を理解する。
ファイルやフォルダの操作に必要な、基本的なターミナルコマンドを習得する。
ターミナルを使って、効率的にプロジェクトの雛形を作成できるようになる。
前提知識と対象読者
💡
Pythonの基本文法と主要なデータ分析ライブラリの概要を学んだ方
対象:すべての医療従事者・研究者・学生の皆様
💡
本講座の1.1〜1.7回で扱った内容
基本的な理解があれば、スムーズに学習を進められます。
目次

はじめに:整理整頓は、未来の自分を救う

皆さん、こんにちは!
これまでの講義で、Pythonという言語の基本的な文法と、データ分析ライブラリという強力な道具を手に入れ、いよいよ本格的なデータ解析やAI開発のスタートラインに立ちましたね。

しかし、ここでもう一つ、これから皆さんが複雑なプロジェクトに挑んでいく上で、コードを書くスキルと「同じくらい」、いえ、もしかしたら「それ以上に」重要になるスキルがあります。それが、「プロジェクト全体を整理整頓するスキル」です。

素晴らしい実験も、実験ノートが乱雑で、どの試薬をどのサンプルに使ったかの記録がごちゃ混ぜになっていては、その結果は誰にも再現できず、科学的な価値を失ってしまいますよね。AI開発も全く同じです。

半年前に実行して素晴らしい結果が出た、あのコード。今、もう一度動かそうとしても、「あれ、元データはどこだっけ?」「どのバージョンの前処理済みデータを使ったんだっけ?」「結果のグラフを出力したスクリプトはどれだ?」…と、自分のデスクトップという名の“樹海”で遭難してしまった、という経験は、多くの研究者が一度は通る道ではないでしょうか。

今回は、こうした悲劇を防ぎ、将来の自分や、論文を読んで結果を検証しようとする他の研究者、そして共同研究者を助けるための、研究の「再現性」を担保する技術を学びます。そのための具体的な「作法」として、①誰が見ても分かりやすいファイル・フォルダの整理術と、②それを効率的に、そしてプロフェッショナルに行うための「ターミナル(コマンドライン)」の基本的な使い方、という二本立てで進めていきましょう。

1. 研究プロジェクトの「型」— 再現性を高めるフォルダ構成

優れた研究プロジェクトには、分野を問わず、ある共通点があります。それは、「誰が見ても、何がどこにあるか分かるように、情報が整理されている」ということです。これは、整然とした実験室の試薬棚や、項目ごとにきちんとファイリングされた患者さんのカルテと同じ思想です。

AI開発の世界でも、多くの先人たちの経験から、「こうしておけば、後で困ることが少ない」という、一種の「型(テンプレート)」が生まれてきました。ここでは、多くのデータサイエンティストが採用している、シンプルで非常に効果的なフォルダ構成の例をご紹介します。この「型」を身につけることが、再現性への確かな第一歩です。

推奨されるプロジェクトフォルダ構成例

大規模AIプロジェクトのフォルダ構成例

各フォルダの役割:なぜ、こう分けるのか?

  • data/: ここには、文字通り全てのデータを格納します。特に重要なのは、raw/(生データ)processed/(加工済みデータ)を分けることです。raw/フォルダには、病院のデータベースからダウンロードしたままの、一切手を加えていない元のデータを保存します。これは、研究の「原点」であり、決して上書きしてはいけません。そして、欠損値の補完や正規化といった前処理を施したデータを、processed/フォルダに保存します。こうすることで、「どんな前処理を施したか」というプロセスが明確になり、いつでも原点に立ち返ることができます。
  • src/ (または scripts/): ここには、再利用可能な、プロジェクトの「心臓部」となるPythonコードを置きます。データの前処理を行う関数群や、モデルを定義するクラス、訓練のメインロジックなど、何度も使うことになる「完成されたコード」を.pyファイルとして保存します。料理で言えば、秘伝の「レシピブック」のような場所ですね。
  • notebooks/: こちらは、「試行錯誤」のための場所です。Jupyter Notebookを使い、データを可視化して傾向を掴んだり、モデルのアイデアを気軽に試したりする、いわば「実験ノート」や「スケッチブック」です。ここで上手くいったアイデアが、最終的に清書されてsrc/フォルダのスクリプトになる、という流れが理想的です。
  • results/ (または output/): モデルの学習結果や、生成されたグラフ、評価指標のサマリーなどを保存する場所です。ここでも、figures/(図)、models/(学習済みのモデルの重み)、logs/(学習ログ)のように、サブフォルダに分けて整理すると、さらに分かりやすくなります。
  • README.md: 最後に、このプロジェクトの「取扱説明書」です。プロジェクトの目的、データの出所、実行方法、必要なライブラリなどを簡潔に記述します。数ヶ月後の自分自身や、新しくチームに加わった共同研究者が、このファイルを読むだけで、すぐに研究を始められる状態を目指します。これは、未来への最高の「親切」だと思います。

いかがでしょうか。このように、「入力(data)」、「処理(src, notebooks)」、「出力(results)」を明確に分離し、それぞれに役割を与えることで、プロジェクトは驚くほど見通しが良くなります。最初は少し面倒に感じるかもしれませんが、この「型」を守ることが、結果的に、エラーの発見を容易にし、再現性を高め、未来のあなたの時間を節約してくれるはずです。

2. ターミナル入門 — AI開発者のための「コマンドライン」操作

なぜターミナルを使うのか? 〜マウス操作からの卒業〜

AI開発の現場や、熟練したプログラマーの動画を見ると、必ずと言っていいほど登場するのが、あの黒い画面に文字が並ぶ「ターミナル」(Windowsでは「コマンドプロンプト」や「PowerShell」)ですよね。マウスでクリックすれば同じことができるのに、なぜ彼らはわざわざコマンドを打ち込むのでしょうか?

それは、ターミナルが、GUI(グラフィカル・ユーザー・インターフェース)では不可能な、高速で、再現性があり、自動化可能な「プログラムによるPC操作」を可能にするからです。例えるなら、マウス操作が「素手での作業」だとすれば、ターミナルは「精密な手術器具」のようなもの。慣れれば、より複雑な作業を、より速く、より正確に行えるようになる、開発者にとっての必須スキルなのです。

  • 高速性: 何百ものファイルの名前を一度に変更する、といった繰り返し作業を、一行のコマンドで瞬時に実行できます。
  • 再現性・自動化: 一連の操作をスクリプトとして保存すれば、誰でも、いつでも、全く同じ手順を再現できます。これは研究の再現性において極めて重要です。
  • サーバー操作: 共同研究でサーバー上のGPUマシンにアクセスする場合など、GUIが存在しない環境では、ターミナル操作が唯一の手段となります。
  • 専門ツールの利用: 今後の講義で触れる可能性のある、バージョン管理ツールGitなど、多くの開発用ツールは、ターミナルからの利用が基本となります。

必須コマンド7選:これだけは覚えよう!

とはいえ、覚えるべきコマンドは無数にあります。ですが、ご安心ください。日常的な研究開発で使うコマンドは、実はほんの一握りです。今回は、ファイルやフォルダを操作するための、最低限これだけは押さえておきたい、という7つのコマンドを、その語源と共に紹介します。語源を知ると、ぐっと覚えやすくなりますよ。

目的コマンド
(mac/Linux)
語源コマンド
(Windows)
語源解説
現在地を知るpwdPrint Working Directorycd(下記参照※)自分が今どのフォルダにいるか(カレントディレクトリ)のフルパスを表示します。
中身を見るlsListdirDirectory今いるフォルダの中にあるファイルやフォルダの一覧を表示します。
移動するcdChange DirectorycdChange Directory指定したフォルダに移動します。cd ..で一つ上の階層に戻ります。
フォルダ作成mkdirMake Directorymkdir (or md)Make Directory新しいフォルダ(ディレクトリ)を作成します。
コピーcpCopycopy(略語ではない)ファイルをコピーします。
移動 / 改名mvMovemove(略語ではない)ファイルを移動させます。同じフォルダ内で使うと名前の変更になります。
削除rmRemovedelDeleteファイルを削除します。【注意】ゴミ箱には入らず完全に削除されるため、実行は慎重に!

※Windowsのcdコマンドは本来「Change Directory」の略ですが、引数なしで実行した場合に限り、現在のディレクトリを表示する機能(mac/Linuxのpwdに相当)を持ちます。

応用コマンド編:作業をさらに効率化する

基本の7コマンドに慣れてきたら、次にもう少し高度な、しかし非常に便利なコマンドをいくつか見ていきましょう。これらを使いこなせると、ターミナルでの作業が格段に快適になります。

目的コマンド
(mac/Linux)
語源コマンド
(Windows)
語源解説
ファイル内容表示cat [ファイル名]concatenatetype [ファイル名](略語ではない)テキストファイルの中身を全て表示します。元々はファイルを連結するコマンドです。
ファイルの先頭/末尾を表示head / tail(単語そのもの)(PowerShell)(下記参照※)巨大なログファイルやデータファイルの先頭や末尾だけを少し見たい時に非常に便利です。
テキスト検索grep [単語] [ファイル名]g/re/pfindstr [単語] [ファイル名]Find Stringファイルの中から、指定した単語が含まれる行を検索して表示します。
マニュアルを見るman [コマンド]Manualhelp [コマンド] or [コマンド] /?(単語そのもの)コマンドの使い方やオプションが分からない時に使います。「魚を与えるのでなく、魚の釣り方を教える」コマンドです。
コマンドを繋ぐ| (パイプ)(記号の形から)| (パイプ)(記号の形から)あるコマンドの出力を、次のコマンドの入力として渡します。例: ls | grep .py (ファイル一覧から.pyを含むものだけ検索)
出力を保存> / >>(矢印の形から)> / >>(矢印の形から)コマンドの実行結果をファイルに保存します。>は上書き保存、>>は追記保存です。
管理者権限で実行sudo [コマンド]Superuser do(右クリック)(GUI操作)システム全体に関わる設定変更や、ソフトウェアのインストールなど、管理者権限が必要な時に使います。
画面を消去clear(単語そのもの)clsClear Screenターミナルの表示がごちゃごちゃしてきた時に、画面を綺麗にします。

※Windowsのコマンドプロンプトにはhead/tailに直接対応するコマンドがありませんが、PowerShellでは Get-Content [ファイル名] -Head 10 のようにして同様の機能が使えます。
※Windowsで管理者権限が必要な場合は、コマンドプロンプトのアイコンを右クリックし、「管理者として実行」を選択して起動するのが一般的です。

ターミナル操作の“真骨頂” — 履歴検索とショートカットで一気に熟練者へ

ターミナルの操作力は、単にコマンドを知っているだけでは完成しません。実は、「入力そのものをどれだけ効率的に扱えるか」が、初心者と上級者の分水嶺です。ここでは、日々の作業を高速化し、エラーやタイポを減らすための履歴活用・ショートカット技術を一挙に紹介します。

過去コマンドを自在に操る「履歴」活用術

操作効果
↑ / ↓(上下キー)過去に実行したコマンドを一つずつ表示
Ctrl + R履歴からキーワードでリアルタイム検索
historyコマンド履歴を一覧表示(通し番号付き)
!123履歴番号123番のコマンドを再実行
!!直前のコマンドを再実行(例:sudo !!

たとえば以前実行したSSH接続コマンドを探したい場合、Ctrl + Rsshと打つだけで即座に該当履歴が表示されます。

覚えておきたい「入力補助ショートカット」

キー操作効果
Tabコマンド・ファイル名の自動補完(2回で候補表示)
Ctrl + Aカーソルを行頭へ移動
Ctrl + Eカーソルを行末へ移動
Ctrl + Uカーソルより前すべてを削除(入力を一括消去)
Ctrl + Kカーソルより後ろをすべて削除
Ctrl + W直前の単語を削除
Ctrl + Y直前に削除した内容を貼り付け
Ctrl + C入力中のコマンドをキャンセル(処理中断)
Ctrl + Dシェルを終了(ログアウト)
Ctrl + L画面をクリア(clear と同等)

入力をまるごと一括削除したいときは?

  • Ctrl + U:カーソルより前を全削除
  • Ctrl + ACtrl + K:すべての入力を削除
  • Ctrl + C:入力をキャンセル+新しい行に戻る

上級者のためのターミナル効率化Tips

ターミナルに慣れてきたら、さらに一歩先へ。以下は、プロの開発者・研究者が実践している作業効率化のテクニックです。

alias(エイリアス)でコマンド短縮

alias ll='ls -la'

.bashrc や .zshrc に記述しておくと、毎回自動で反映されます。

スクリプトで操作を自動化

#!/bin/bash
mkdir -p project/{data,src,notebooks,results}

セッションログを記録

script session.log

終了時は exit を入力。ターミナルでの全操作が記録されます。

コマンド出力をフィルタ処理

ls -la | grep ".csv"

自作関数で作業をワンライナー化

function backup_code() {
  tar -czf code_backup.tar.gz *.py *.ipynb
}

rmの安全対策(対話モード化)

alias rm='rm -i'

うっかり削除を防ぎたい方におすすめです。

これらのテクニックを少しずつ取り入れていくことで、ターミナルは「黒い画面」から「最速・最軽量の研究開発インターフェース」へと変貌します。次節では、これらを使って実際にプロジェクトを構築するステップに進みましょう。

3. 実践デモ — ターミナルでプロジェクトを準備する

理論を学んだら、すぐに手を動かしてみるのが、スキルを定着させる一番の近道です。ここでは、先ほど学んだ必須コマンドだけを使い、推奨されるプロジェクトのフォルダ構成を、実際にあなたのコンピュータ上に作成してみましょう。

まず、あなたのPCの「ターミナル」(または「コマンドプロンプト」)を開いてください。そして、研究プロジェクトをまとめて置いているフォルダなど、好きな場所に cd コマンドで移動しておきましょう。(もし分からなければ、デスクトップでも構いません!)

コマンド実行のステップ・バイ・ステップ

以下のコマンドを、一行ずつ、ご自身のターミナルにコピー&ペーストするか、手で打ち込んで、Enterキーを押してみてください。#で始まる行はコメント(説明)なので、打ち込む必要はありません。


# ステップ1: プロジェクトのルートフォルダを作成します。
# 'new_medical_study' という名前のフォルダが新しく作られます。
mkdir new_medical_study

# ステップ2: 作成したフォルダの中に「入ります」。
cd new_medical_study

# ステップ3: 本当に移動できたか、現在地を確認します。
# 実行すると、.../...(あなたのPCのどこか)/new_medical_study というパスが表示されるはずです。
pwd  # macOS/Linux の場合
# cd   # Windows の場合 (引数なしで実行)

# ステップ4: プロジェクトに必要なサブフォルダを一気に作成します。
mkdir data src notebooks results

# ステップ5: フォルダが正しく作成されたか、中身を見て確認しましょう。
# 実行すると、'data', 'notebooks', 'results', 'src' という4つの名前が表示されるはずです。
ls   # macOS/Linux の場合
# dir  # Windows の場合

どうでしたか?ほんの数行のコマンドを打ち込むだけで、一瞬で、かつ正確に、整然としたプロジェクトの「骨格」を準備することができました。マウスで一つ一つフォルダを作っていくよりも、ずっと速くて、何より「プロっぽい」感じがしませんか?

この一連の作業をスクリプトとして保存しておけば、新しいプロジェクトを始めるたびに、いつでもこの理想的な環境を一瞬で再現できます。これこそが、ターミナルが持つ「自動化」の力の入り口なのです。ぜひ、今後のご自身の研究でも、この「型」を基本として、プロジェクトを始めてみてください。

まとめと次のステップへ:いよいよAIの「脳」の中へ

お疲れ様でした!これまでの講義で、Pythonプログラミングの基本的な考え方から、データ分析ライブラリの活用法、そして今回学んだ、研究プロジェクトを支える「整理整頓の作法」まで、AI開発の旅に出るための、いわば「装備」と「地図の読み方」が、かなり揃ってきましたね。

一見地味に思えるかもしれませんが、このフォルダ構成やターミナルの知識は、これから皆さんがより複雑で、より大きなプロジェクトに挑む際に、必ず「やっておいて良かった」と思える、重要な基盤となるはずです。



ご利用規約(免責事項)

当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。

第1条(目的と情報の性質)

  1. 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
  2. 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
  3. 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
  4. 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。

第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。

第3条(医療行為における責任)

  1. 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
  2. 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
  3. 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。

第4条(情報の正確性・完全性・有用性)

  1. 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
  2. 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。

第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。

第6条(知的財産権)

  1. 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
  2. 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。

第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。

第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。

第9条(免責事項)

  1. 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
  2. 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
  3. 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
  4. 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。

第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。

第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。


For J³, may joy follow you.

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

AI医師科学者芸人・医学博士・連続起業家・元厚生労働省医系技官
ハーバード大学理学修士・ケンブリッジ大学MBA・コロンビア大学行政修士
岡山大学医学部卒業後、内科・地域医療に従事。厚生労働省で複数室長(医療情報・救急災害・国際展開等)を歴任し、内閣官房・内閣府・文部科学省でも医療政策に携わる。
退官後は、日本大手IT企業や英国VCで新規事業開発・投資を担当し、複数の医療スタートアップを創業。現在は医療AI・デジタル医療機器の開発に取り組むとともに、東京都港区で内科クリニックを開業。
複数大学で教授として教育・研究活動に従事し、医療者向けAIラボ「Medical AI Nexus」、医療メディア「The Health Choice | 健康の選択」、美・医・食ポータル「Food Connoisseur」を主宰。
ケンブリッジ大学Associate・社会医学系指導医・専門医・The Royal Society of Medicine Fellow

目次