はじめに
突然ですがみなさん、コードを勉強しているときこんな経験ありませんか?
講義や研修では理解したはずなのに、いざ自分で書こうとすると手が止まる...
こんにちは、WHI25年入社の渡邉です。
研修の課題やPaizaの教材でプログラミングを勉強しているとき、私はよくこの壁にぶつかってきました。その場では理解したつもりでも、後から思い出そうとすると霧の中...
過去の資料やサンプルコードを見直しても、そこにあるのは「具体的な値」だけで、「なぜその構造になるのか」までは頭に入っていませんでした。
「このままでは、いつまで経っても技術を自分のものにできない!」
そう危機感を覚えた時、私にとっての「Work Fun」について考えました。
私にとってのWork Funは技術を理解し、それを自由自在に自分で操作できることです。
理解した気になって終わることを防ぐために、私は入社後、ある学習スタイルを徹底することにしました。
それは、教わったコードをそのままメモにするのではなく、未来の自分が読んでも、構造が一発でわかるように記録する「一般化」という学習法です。
今回は、新卒の私が技術を「定着」させ、応用を効かせるために行っている、具体的なドキュメント作成術をご紹介します。
コードを「一般化」するとは
では、具体的にどうやってメモを取ればいいのか。私はいつも、以下の2つのステップを踏んでドキュメントを作っています。
【Step1:構造を抜き出す】
- コードを見て、「どこが文法(定型)で、どこが開発者が決める値(可変)か?」を分解します。
- ここで重要なのが、「言語化」です。自分なりの言葉で具体的なコードを汎用的な言葉に落とし込むことで理解力も上がります。
【Step2:言語仕様の理解を深める】
- 「なぜこのような順番でコードが書かれているのか?」、「なぜ省略できるのか?」といった言語の仕様について整理します。
この2ステップを意識しながら、JavaとSQLで「初級編」と「応用編」を見てみましょう。
Level 1. 初級編(構造を抜き出す)
まずは、Step 1の「定型と可変の分解」がメインとなるシンプルな例です。
SQLの場合:基本のSELECT文
一番最初に習う構文ですが、これを言語化することが全ての基礎になります。
具体的なコード(その場限りの情報)
SELECT name FROM users;
これだと「usersテーブルからnameを取得する」ということしかわからず、ほかの場面で使えません。
一般化したメモ
SELECT 取得したいカラム名 FROM レコードが存在するテーブル名;
ここでは具体的な値を、役割(取得したいカラム名,テーブル名)に置き換えています。これで、どんなテーブルに対しても使える「型」が出来上がります。
Javaの場合:コレクションの宣言
リストの作成も、具体的な型に惑わされずに構造を見抜きます。
具体的なコード
ArrayList<String> names = new ArrayList<>();
一般化したメモ
ArrayList<データ型> 変数名 = new ArrayList<>();
ここでも<>の中身はStringだけでなく、あらゆるデータ型が入る場所だと認識し、置き換えます。「変えていい場所」と「変えてはいけない場所(new ArrayList)の境界線を引きます。
Level 2. 応用編(言語仕様の理解を深める)
次は、Step 2の「言語仕様への理解」が必要になる、少し複雑な例です。
SQLの場合:テーブル結合 (JOIN)
SQLを学んでいると絡み合う要素が多くなってきて、どう書けばいいのかわからなくなってしまいます。そんな時こそ構造を一般化し、関係性を理解します。
具体的なコード
SELECT
user_name
FROM
users
LEFT OUTER JOIN
departments
ON
users.dept_id = departments.id;
少し見やすくするため改行しましたが、それでも初学者にとっては何をやっているのかすぐには分かりませんね。
一般化したメモ
SELECT
カラム名
FROM
ベースとなるテーブル名
LEFT OUTER JOIN
結合したいテーブル名
ON
ベーステーブル.結合キー = 結合したいテーブル.結合キー;
どうでしょうか?先ほどより何をすればいいかわかりやすくなっていませんか?
単に構造を抜くだけでなく、ここではONの後ろは「何と何をイコールで結びたいのか」というロジックを書くことで汎用的に使えるようにしています。
Javaの場合:メソッド定義と引数
メソッド定義を一般化するには、アクセス修飾子や戻り値のルールを知っておく必要があります。
具体的なコード
public int calculateArea(int width, int height) {
return width * height;
}
一般化したメモ
アクセス修飾子 戻り値のデータ型 メソッド名(引数型1 引数名1, 引数型2 引数名2, ...) {
// 処理内容
return 戻り値; // ※戻り値の型がvoid以外の場合必須
}
ここでは、「return は必須なのか?(void以外なら必須)」「引数は複数ありえるのか?(...で表現)」といった言語仕様(ルール) を盛り込んでいます。 こうして一般化することで、「publicの次は必ず戻り値の型が来る」というJavaの文法ルールが頭に定着します。
なぜ、ここまでやるのか? (苦労と工夫)
正直なところ、この「一般化」作業は時間がかかります。流し見やコピペではなく、自分の言葉で理解に落とし込んでいるのですから。
それでも私がこれを続ける理由は、曖昧な理解では技術を自由に扱うことができないからです。自分なりのWork Funを実現するためにもここは時間をかけて行いました。
「正しさ」の壁とAI活用
一般化しようとすると、「あれ、ここの型って省略できるんだっけ?」「この引数の順番って固定?」といった疑問が次々と湧いてきます。 そこで私は、以下の方法で理解を深めています。
1. AI(ChatGPT等)に壁打ちする
- 「このコードの構造はこういう理解であってる?」と確認したり、そもそも構造が理解できないときは「中学生もわかるように説明してください」とすると専門用語とかもなくわかりやすく教えてくれます。
2. 先輩社員との1on1
- 社会人の方なら先輩社員に相談するのもおすすめです。現場での実用的な使われ方や、「現状の自分の理解が正しいか」を質問することでより理解度が上がると思います。
「だれかに説明する」つもりで書く
人に教えてる時が一番勉強になるとよく言われます。しかし、「誰かに説明する機会」はそんなに頻繁にはありません。だからこそ、メモをとる時には「誰かに説明するつもりで書く」のがとてもいいと私は思います。
今回、私は新卒研修の中で未経験の同期に見てもらうつもりで書きました(実際にみてもらいました)。
ツールと実際のドキュメント
今回私が使ったツールはGoogle ドキュメントです。これは、社内でだれでも見られるようにしたかったのが理由で、共有しやすかったからこれを選びました。自動保存できるのもうれしいですね。
ドキュメントに関してはコードブロックがデフォルトで使えない方もいるので拡張機能のアドオン取得からCode Blocksをインストールすれば同じように使用できます。
自分一人が見直す用ならVS CodeでMarkdown形式で書くのもおすすめです。こちら自分の同期が書いた記事で新卒こそメモはMarkdownで取れ!というもので参考にしてみてください。
実際に私がまとめたドキュメント例
一般化したもの以外にも個人的にわかりやすいメモを残しておくとさらに後から見返したときに理解しやすいと思います。
おわりに
「理解する」こそが、最高のWork Fun!
一般化して残すことの最大のメリットは、未来の自分が困った時の最強の説明書が出来上がることです。 説明する力が身につき、応用が利くようになり、何より「なぜ動くのかわからない恐怖」、「どう書いていいかわからない」から解放されます。
新卒・若手の皆さん。 今日学んだそのコード、コピペして終わりにせず、一行だけでいいので「一般化」してみませんか? その積み重ねが、技術を自由自在に操る楽しさ(Work Fun)へ繋がっていると信じています。

