はじめに
この記事は超個人的な内容です。
ここに書いてある内容はあくまで私個人の経験・好みに基づくものであり、世の中にはより優れた方法や、より詳しい記事がたくさんあります。「こういうやり方をしている人もいるんだな」程度に読んでいただけると幸いです。
よく更新します!
この記事は気付いたことや新しく学んだことを随時追記していく予定です。よろしければ ストック していただけると、更新時に見返しやすくなるかと思います 🙏
変更履歴
| 変更日 | 内容 |
|---|---|
| 2025/11/25 | 初版作成 |
| 2026/03/21 | フォーマッターに関する項目追加 |
| 2026/04/15 | 図・表に関する項目を追加 |
自己紹介
- プログラミング歴: 7年目
- メイン使用言語/フレームワーク: Python, Next.js, TeX, Slidev など
- 早稲田大学大学院生
プログラミングをやる上で大事なこと
エラーに向き合う
英語で書かれたエラーが出てくると怯んでしまう人が多いですが、まずはしっかり読みましょう! どこのコードでどんなエラーが起きているかが書いてあります。
たくさん調べる
新しいコードを書く時やエラーを解決する時は、とりあえず調べましょう! 現在はまずGPT、次にインターネットという順番で調べると良いと思います。プログラミングの場合、GPTの出してくる修正案がうまくいかないこともよくあるので、エラーをそのままインターネットで調べてみるのも手です。
ちなみに、私は同じエラーの修正に最大2週間くらいかけたこともありました。辛抱強くやることが大事です!
整理する
コードのフォルダやファイルはきれいに置いておきましょう。
たまにデスクトップやダウンロードフォルダに全部入れている人もいますが、GitHubを使う際などに厄介なことになるので、しっかり整理することをおすすめします。
環境構築してみる
自分で手を動かして、どこに何があるかを理解しながら進めていくことも重要です。Pythonが動くようにする環境構築を自分でやってみるのは良い経験になります。
一からやる方が楽なこともある
何度かプログラミングをやっているとエラーが重なって訳のわからないことになる時があります。こういう時は、思い切って一からやり直す方が楽な場合もあります。
コメントやprintをたくさんする
自分の思っていることと実装が一致していない時に、理解不能なエラーが起こることが多いです。
こういう時は、一部のコードだけ実行することでエラー箇所を探しましょう。
コードをコメントアウトし、少しずつコメントアウト&実行を繰り返すことで原因を特定できます。
そもそもコードを書く時に、コメントを書きながら書いていくと理解しやすくなります。
VSCodeの場合、Ctrl + /(Win) または ⌘ + /(Mac) で一気にコメントアウトできます!
ショートカットキーを覚える
VSCodeにはすごく便利なショートカットキーがあります。これらを覚えることは人生を楽にすることにつながります。
進捗記録をつける
ゼミ資料などを作る上で非常に役立ちます。その日に何をやったかを残しておかないと、細かい変更内容を忘れてしまいます。
環境構築
エディターのインストール
まずはエディターをインストールしましょう。2026/1/18現在、おすすめは VSCode と Antigravity です。Antigravity はGoogleが2025年11月に発表した、VSCodeベース(厳密にはWindsurfのフォークと言われています)のAIエージェント向けIDEです。Gemini 3 Proを中心に、Claude Sonnet 4.5やGPT-OSSなど複数のモデルを切り替えて使えます。
個人的には VSCode に入れる Copilot の方が賢くて好きなのですが、GitHubのStudent登録が面倒な部分もあるので、とりあえず Antigravity を入れておけばよいと思います。
これらのエディターは拡張機能を入れるとさらに使いやすくなります。色々便利なものがあるので調べてみてください!
便利コマンド
面倒臭いと思っている人もとりあえずやってみましょう!便利です。
基本のショートカット
新しいファイルを作る
Windows: Ctrl + N
Mac: Cmd + N
ファイルを保存する
Windows: Ctrl + S
Mac: Cmd + S
編集に便利なショートカットキー
同時編集
同じ文字を複数選択して同時に編集できます。変数名を変える時に便利
Windows: Ctrl + D
Mac: Cmd + D
行を複製する
コピペしなくても下の行に複製できます
Windows: Shift + Alt + ↑/↓
Mac: Option + Shift + ↑/↓
行を移動する
選択した行を上下に動かせます。順番を入れ替える時に便利
Windows: Alt + ↑/↓
Mac: Option + ↑/↓
VSCodeからAntigravityへの移行
基本的にAntigravityをダウンロードして指示に従えば完了します。ただ、私は拡張機能の移行に失敗しました。この記事に備忘録を残しているので参考にしてください。
私がダウンロードしている拡張機能一覧
akamud.vscode-theme-onedark
alefragnani.rtf
anseki.vscode-color
antfu.slidev
antfu.unocss
anthropic.claude-code
bierner.markdown-mermaid
bierner.markdown-preview-github-styles
bpruitt-goddard.mermaid-markdown-syntax-highlighting
bradlc.vscode-tailwindcss
bramvanbilsen.matlab-code-run
christian-kohler.path-intellisense
chunsen.bracket-select
cloudlatex.cloudlatex
codezombiech.gitignore
cschlosser.doxdocgen
davidanson.vscode-markdownlint
dbaeumer.vscode-eslint
dioco.find-all-imports
docker.docker
eamodio.gitlens
ecmel.vscode-html-css
esbenp.prettier-vscode
expo.vscode-expo-tools
figma.figma-vscode-extension
formulahendry.auto-rename-tag
formulahendry.code-runner
george-alisson.html-preview-vscode
gimly81.matlab
github.copilot
github.copilot-chat
github.vscode-github-actions
github.vscode-pull-request-github
grapecity.gc-excelviewer
gxl.git-graph-3
hediet.vscode-drawio
htmlhint.vscode-htmlhint
hwencc.html-tag-wrapper
iamhyc.overleaf-workshop
ics.japanese-proofreading
illixion.vscode-vibrancy-continued
ionutvmi.path-autocomplete
james-yu.latex-workshop
jeff-hykin.better-cpp-syntax
jeffersonqin.latex-snippets-jeff
johan-cho.ampl-vscode
jundat95.react-native-snippet
kevinrose.vsc-python-indent
lllllllqw.jsdoc
marimo-team.vscode-marimo
marp-team.marp-vscode
mechatroner.rainbow-csv
michael-sundvick.ampl
mohd-akram.vscode-html-format
mohsen1.prettify-json
ms-azuretools.vscode-containers
ms-azuretools.vscode-docker
ms-ceintl.vscode-language-pack-ja
ms-python.black-formatter
ms-python.debugpy
ms-python.flake8
ms-python.isort
ms-python.pylint
ms-python.python
ms-python.vscode-pylance
ms-python.vscode-python-envs
ms-toolsai.jupyter
ms-toolsai.jupyter-keymap
ms-toolsai.jupyter-renderers
ms-toolsai.tensorboard
ms-toolsai.vscode-jupyter-cell-tags
ms-toolsai.vscode-jupyter-slideshow
ms-vscode-remote.remote-containers
ms-vscode-remote.remote-ssh
ms-vscode-remote.remote-ssh-edit
ms-vscode.cmake-tools
ms-vscode.cpptools
ms-vscode.cpptools-extension-pack
ms-vscode.cpptools-themes
ms-vscode.live-server
ms-vscode.remote-explorer
ms-vsliveshare.vsliveshare
myriad-dreamin.tinymist
naumovs.color-highlight
oderwat.indent-rainbow
orangex4.vscode-typst-sync
percy.vscode-pydata-viewer
pizzacat83.codic
quarto.quarto
qwtel.sqlite-viewer
qzsg.kitty-time
redhat.java
redhat.vscode-yaml
ritwickdey.liveserver
rvest.vs-code-prettier-eslint
streetsidesoftware.code-spell-checker
surv.typst-math
tecosaur.latex-utilities
tialki.tex-preview
trapfether.tailwind-raw-reorder
twxs.cmake
uctakeoff.vscode-counter
vincent-templier.vscode-netron
virejdasani.incredibly-in-your-face
vittorioromeo.expand-selection-to-scope
vscjava.migrate-java-to-azure
vscjava.vscode-gradle
vscjava.vscode-java-debug
vscjava.vscode-java-dependency
vscjava.vscode-java-pack
vscjava.vscode-java-test
vscjava.vscode-java-upgrade
vscjava.vscode-maven
vstirbu.vscode-mermaid-preview
vue.volar
vunguyentuan.vscode-css-variables
wakatime.vscode-wakatime
xuanli.spice
yzane.markdown-pdf
yzhang.markdown-all-in-one
znck.grammarly
Codingファイルを作る
コードはとにかくいろいろ増えるので、整理することが大事です。
私は以下のように 言語/プロジェクト/各ファイル の構造で整理しています(自分のユーザーフォルダ直下など)。
Coding/
├── Python/
│ ├── practice/
│ ├── my-project/
│ ├── 勉強用/
├── NextJS/
│ ├── my-app/
│ ├── blog/
├── Tex/
│ ├── 研究/
│ ├── 授業/
├── Cpp/
├── Slidev/
「パス」という言葉を覚えましょう! 要するにファイルの住所です。
日本/東京/新宿のように、/Users/[user_name]/Coding/Python/practice というかたちで全てのファイルには住所があります。
プログラミングをする上で、ファイルの位置はすごく大事な要素です。「どこのデータを使っているか」「どこのファイルに書き込んでいるか」をしっかり理解しながら書くことが重要です。
uvの導入
では、Pythonを導入してみましょう。
方法はたくさんありますが、今回は uv を使います。
uv についてはこちらをご覧ください。
Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Mac
brew install uv
インストールできたかどうかを確認するために、そのまま uv と入力してください。uv コマンドの使い方が表示されれば成功です。
仮想環境を作る
いよいよPythonの環境を作成していきましょう。Windowsの人はPowerShellを、MacのひとはTerminalを開いてください。このアプリをデスクトップやタスクバーにピン留めしておくと良いです。
使い方
PowerShellやTerminalでは、環境構築やフォルダ操作などができます。
PS C:\Users\[user_name]>
開いたらこのように書いてあると思います。これは、PowerShellが C:\Users\[user_name] という住所を見ていることを示しています。
cd コマンドで移動していきましょう。
PS C:\Users\[user_name]> cd C:\Users\[user_name]\coding\python
このコマンドによって、現在地が C:\Users\[user_name]\coding\python に移動できます。以下のように書くことで戻れます。
PS C:\Users\[user_name]\coding\python> cd ../
カーソルが入力状態になっている上で、上下矢印キーを操作することで以前入力した内容をもう一度入れることができます。
また、mkdir コマンドを使うことでフォルダを作ることができます。
PS C:\Users\[user_name]\coding\python> mkdir hoge
まず、PowerShellまたはTerminalの現在地を coding/python にしてください。以下のような表示になっていればOKです。
PS C:\Users\[user_name]\coding\python>
次に、uv init test-project を実行してください。これにより test-project というフォルダができます。
フォルダ名に日本語は使えません。
作成したフォルダの中に移動します。
cd test-project
最後に、uv run main.py を実行してください。
これでひとまずPythonが動く環境ができました!
Pythonファイル
種類
Pythonには大きく分けて3種類のファイル形式があります。
| 形式 | 特徴 | 用途 |
|---|---|---|
.py |
普通のPythonスクリプト | クラスやよく使う関数を入れる実行ファイル |
.ipynb |
Google Colabなどで使われるセル形式 | 実行結果が残るので実験に向いている |
.py(marimo形式) |
.py なのに .ipynb のように使える優れもの |
上の良いとこ取り |
結論:marimoを使おう
先に結論を書きます。
marimoで書かれた .py を使いましょう。.ipynb は使わないでください。
なぜ .ipynb を避けるのか
「セル形式で実験できて便利じゃん」と思うかもしれませんが、.ipynb には次のような問題があります。
1. gitとの相性が最悪
.ipynb の中身はJSON+実行結果の塊なので、ちょっとコードを直しただけでも差分(diff)がぐちゃぐちゃになります。複数人で作業してマージしようとすると地獄を見ます。
2. AI(GPT/Claudeなど)が扱いにくい
.ipynb はJSON形式なので、AIに直接編集させたり出力させたりするのが非常に苦手です。「このノートブック直して」と頼んでもうまくいかないことが多いです。
なぜmarimoが良いのか
marimoは、.ipynb のセル形式の便利さと、.py の扱いやすさを両立してくれるライブラリです。
- ✅ ファイルの実体は
.pyなので、gitの差分がきれいに見える - ✅
.pyなのでAIにも読ませやすい・編集させやすい - ✅ セル形式で書けるので、ipynbと同じ感覚で実験できる
- ✅ 変数の二重定義などをエラーとして検知してくれるので、バグに気付きやすい
つまり、ipynbの良いところは残しつつ、ipynbの困りどころを解消してくれるのがmarimoです。
使い方
marimoのインストール
pip install marimo
uv add marimo # uv経由
既存ノートブックの編集
marimo edit existing_notebook.py
uv run marimo edit existing_notebook.py # uv経由
ipynb → marimoへの変換
ipynbで既に作ってしまった人もすぐに移行できます。
marimo convert your_notebook.ipynb -o your_notebook.py
uv run marimo convert your_notebook.ipynb -o your_notebook.py # uv経由
VSCodeにおけるmarimo
毎回 marimo edit とするのは大変なので、VSCodeの拡張機能(こちら)を入れておきましょう。
フォーマッターの導入
追記: 2026/03/21
Pythonは他の言語と違い、インデントで判断するため非常に厄介な言語です。また、不要なimportや意図しないインデントは重大なミスを起こします。
そこで、リンター・フォーマッターである Ruff を使ってこれらの問題を勝手に解決してもらいます。
具体的なやり方については、後述する参考資料のRust製の高速Linter・Formatter「Ruff」の初心者向け解説の VS Codeエディタの設定 という章をご覧ください。Format On Save にチェックを入れることで、保存するたびに勝手にコードが綺麗になっていきます!
グラフを作る時
追記: 2026/04/15
データを分析する際、しばしばグラフを作成することがあります。よく使われるのが matplotlib です。こちらのライブラリの使い方に関しては様々な記事があるのでご覧ください。
一方で、おすすめなのは Plotly という新しいライブラリです。こちらのライブラリでは、図をインタラクティブに操作することができます。例えば、点をホバーするとその点の情報を出すようにしたり、凡例を触ってグラフ内の一部の情報の表示/非表示を切り替えることができます。
この機能によって、発表時に利用するグラフを作る時に、コードを変えて実行せずとも、簡単に様々なパターンのグラフを作ることができます。
Plotly公式ページ でインタラクティブな図を体験できます。
marimoとの相性も良いのでぜひ使ってください。
データの可視化とリアクティブなグラフ|marimoではじめるPythonノートブック
marimoでの書き方は少し異なるので注意してください!
生のplotlyを使うのではなく、marimoの中に含まれる mo.ui.plotly を利用します!
加えて、Plotly はHTMLで出力できるため、私はスライドにインタラクティブなグラフを添付することが可能になりました。
表データを使う時
追記: 2026/04/15
データの多くの形式は表形式になっています。皆さんがよく使う表データといえば Excel がありますが、Pythonでは Excel を使うべきでしょうか。答えはNoです。なぜなら、Excelデータは重すぎるからです。
そこで、多くのデータは csv 形式で配布されます。そして、csv を pandas で読み込むことを教えられることが多いです。
しかし、ここにも罠があります。なぜなら、pandas は高性能ゆえにデータを探すのが遅いからです。では、何を使うのが良いのでしょうか。
それは、データを db 形式で保存し、sqlite を使って検索することです。なぜなら、sqlite はデータベースのためのものであり、その速度が圧倒的に速いからです。
SQLiteの真価はインデックスにあって、例えば
WHERE tournament_id = ?のような検索なら、インデックスありのSQLiteはPandasのdf[df.id == x]より桁違いに速くなります。
7万行のCSVで特定条件を検索した場合、CSV+Pandasは574ms、SQLite(インデックスあり)は10ms — 約50倍の差
この「約50倍」は インデックスありSQLite vs インデックスなしPandas の比較なので、条件次第で差は変わります。Pandas側でも事前に set_index() しておくなどの工夫をすれば差は縮まりますが、それでも大規模データの絞り込み検索ではSQLiteが有利な傾向があります。
VS Codeで db ファイルを見る時は、SQLite Viewer という拡張機能がおすすめです。
操作別の速度比較(SQLite vs Pandas)
以下の表はClaudeによる生成なので参考程度に。
| 操作 | 速い方 | 備考 |
|---|---|---|
| SELECT(列選択) | SQLite | どのデータサイズでも <0.1ms。Pandasは1000万行で最大0.5秒 |
| FILTER(絞り込み) | SQLite | インデックスがあれば10〜50倍速い。データが大きくなるほど差が開く |
| SORT(並び替え) | SQLite | Pandasが常に少し遅いが、最も差が小さい操作 |
| GROUP BY(集計) | Pandas | Pandasはgroup-byに最適化されており、大規模データでも得意な操作 |
| JOIN(結合) | SQLite | どちらも遅い操作の一つだが、SQLiteの方が速い |
| CSV読み込み | Pandas |
pd.read_csv() は単純なCSV読み込みでは速い |
使い方
変換方法
pandas と標準ライブラリの sqlite3 を使います。追加インストールは不要です。
import pandas as pd
import sqlite3
# CSVを読み込む
df = pd.read_csv("data.csv")
# DBファイルに保存する(ファイルがなければ自動で作成される)
conn = sqlite3.connect("data.db")
df.to_sql("data", conn, if_exists="replace", index=False)
conn.close()
print("変換完了!")
to_sql の引数について:
-
"data"はDB内のテーブル名(なんでもOK) -
if_exists="replace"は既存のテーブルがあれば上書き -
index=Falseはpandasの行番号をDBに保存しない
SQLiteで検索する
import sqlite3
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
# 例:tournament_id が 5 のデータを検索
cursor.execute("SELECT * FROM data WHERE tournament_id = ?", (5,))
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
? に直接値を文字列で埋め込まず (5,) のように渡すのがポイントです。SQLインジェクション対策になります。
結果をpandasのDataFrameで受け取る
import pandas as pd
import sqlite3
conn = sqlite3.connect("data.db")
df = pd.read_sql_query("SELECT * FROM data WHERE tournament_id = ?", conn, params=(5,))
print(df)
conn.close()
インデックスを作る(速度をさらに上げたい場合)
よく検索するカラムにインデックスを作っておくと、データが増えても高速なままです。
conn = sqlite3.connect("data.db")
conn.execute("CREATE INDEX IF NOT EXISTS idx_tournament ON data (tournament_id)")
conn.close()
一度作れば次回以降は自動で使われるので、繰り返し実行しても問題ありません。
おわりに
冒頭でも書きましたが、この記事は私個人の経験に基づいた超個人的な内容です。間違いや「もっと良い方法あるよ!」というご指摘があればぜひコメントください 🙏
また、随時更新していきますので、よろしければ ストック していただけると嬉しいです!
