コードレビュー道場
本日の担当業務(言語)を選んでください
その「違和感」に、0.5秒で気づけますか?
経理、人事、総務。
バックオフィスの現場では、今やExcel VBAやGAS(Google Apps Script)だけでなく、Pythonでのデータ分析や、基幹システムの裏側にあるSQL、Javaといった技術に触れる機会が増えてきました。
しかし、ふとした瞬間に起きる「構文エラー」や「実行時エラー」。
たった1行の記述ミスや、全角スペースの混入が、大切な業務時間を奪ってしまうことがあります。
この「コードレビュー道場」は、バックオフィス業務で遭遇しやすいプログラミング言語の「あるあるミス」を、ゲーム感覚で瞬時に見抜くトレーニングツールです。
PCでもスマホでも、移動中や業務の合間に。
あなたの「違和感に気づく力」を試してみてください。
なぜ、バックオフィスに「コードを読む力」が必要なのか
「プログラミングはエンジニアの仕事」と割り切れたのは、もう過去の話かもしれません。
業務効率化のために誰かが作ったマクロ、クラウドツール連携のスクリプト、基幹システムからデータを抽出するクエリ。これらが動かなくなった時、「エンジニア待ち」で業務を止めるのではなく、「ここがおかしいかも?」と当たりを付けられる力があれば、現場のトラブル解決スピードは劇的に上がります。
自分でゼロから書けなくても、「読む」ことができれば、業務の主導権を握ることができます。
このゲームでは、実務で頻出する以下の5つの言語に対応しました。
収録言語の「あるある」と攻略のヒント
ゲームで高得点を狙うため、そして明日の実務で冷や汗をかかないために、各言語の「よくある落とし穴」を解説します。
ゲーム攻略と実務のための「エラー解説」虎の巻
ゲーム内で出題される問題は、実際の開発現場や事務処理の自動化で頻繁に遭遇するものばかりです。 「なんとなく」で選んでいた選択肢を「確信」に変えるために、各言語の代表的なエラーパターンとその理由を解説します。
Excel VBA:見た目では気づかない「型」と「空白」
経理や総務で最も馴染み深いVBAですが、その分「落とし穴」も多い言語です。
オブジェクト変数の Set 忘れ
- × Error:
rng = Range("A1") - ○ Pass:
Set rng = Range("A1") - 解説: セル(Range)やシート(Worksheet)などの「オブジェクト」を変数に入れる時は、必ず
Setが必要です。これを忘れると「オブジェクト変数が設定されていません」というエラーが出ます。VBA初心者が最初に躓くポイントです。
全角スペースの混入
- × Error:
Dim x As Integer - 解説: コードの中に全角スペース( )が混ざっているとコンパイルエラーになります。Web上のコードをコピーした際によく混入します。見た目で判断するのが非常に難しいため、動かない時はまず「空白」を疑いましょう。
Integer(整数)の罠
- × Error:
Dim i As Integer(で、32768以上の数字を入れる) - 解説: VBAの
Integer型は -32,768 から 32,767 までしか扱えません。現在のExcelは100万行以上あるため、行番号を扱う変数はIntegerではなく、より大きな数字を扱えるLongを使うのが実務の定石です。
Google Apps Script (GAS):VBAの常識を捨てよう
GASはJavaScriptがベースです。VBAと同じ感覚で書くと、思わぬエラーに見舞われます。
カッコ () の省略は不可
- × Error:
Logger.log "Hello" - ○ Pass:
console.log("Hello"); - 解説: VBAでは引数のカッコを省略できますが、GAS(JavaScript)では必須です。また、文末のセミコロン
;も忘れずにつける癖をつけましょう(なくても動くことが多いですが、予期せぬ挙動を防ぐために推奨されます)。
行番号と配列インデックスのズレ
- × Error:
sheet.getRange(0, 1) - ○ Pass:
sheet.getRange(1, 1) - 解説: スプレッドシートの行・列番号は「1」から始まりますが、取得したデータ(配列)のインデックスは「0」から始まります。この「1ズレ」はGAS開発の永遠のテーマです。
getRange(0, 1)は存在しない範囲を指定しているためエラーになります。
変数の宣言ミス
- × Error:
ver x = 10;(スペルミス) - ○ Pass:
const x = 10;またはlet x = 10; - 解説: 単純なスペルミス(ver)は意外と見落としがちです。また、現代のJavaScriptでは再代入しない変数は
const、再代入する変数はletを使い分け、古いvarは避けるのが一般的です。
Python:インデントとスペルが命
シンプルで読みやすいPythonですが、その分「書き方のルール」は厳格です。
インデント(字下げ)の不一致
- × Error:
def func():の次の行で行頭を揃えていない - 解説: Pythonでは、インデントでブロック(処理のかたまり)を表現します。関数の定義や
if文の中身は必ずインデントを下げる必要があります。ズレているだけでIndentationErrorになり動きません。
リストへの追加メソッド
- × Error:
lst.push(5) - ○ Pass:
lst.append(5) - 解説: JavaScriptなどの経験者がやりがちなミスです。Pythonのリストに要素を追加するのは
pushではなくappendです。
ライブラリのインポート
- × Error:
import panda as pd - ○ Pass:
import pandas as pd - 解説: データ分析ライブラリは
pandasです。sが抜けるだけで「モジュールが見つかりません」と怒られます。
SQL:一文字の違いがデータを壊す
データベースを直接操作するSQLは、ミスの影響範囲が大きいため、特に慎重なレビューが求められます。
全件削除・全件更新の恐怖
- × Error:
DELETE FROM logs; - ○ Pass:
DELETE FROM logs WHERE date < '2023-01-01'; - 解説:
WHERE句(条件)を付け忘れると、テーブル内の全てのデータが消えます。UPDATEも同様です。実務では、まずSELECTで対象データを確認してから書き換えるのが安全な手順です。
単純なスペルミス
- × Error:
SELECT * FORM users; - ○ Pass:
SELECT * FROM users; - 解説:
FROMをFORMと書いてしまうのは、SQLあるあるの一つです。他にもWHEREをWEHREと書いてしまうなど、指が覚えているからこそのタイプミスに注意が必要です。
Java:厳格さを愛する言語
基幹システムなどで使われるJavaは、曖昧さを許さない堅牢な言語です。
文字列の比較
- × Error:
if (str == "Test") - ○ Pass:
if (str.equals("Test")) - 解説: Javaで文字列の中身が同じかどうかを比較する場合、
==は使えません(==はオブジェクトが同一かを判定してしまいます)。必ず.equals()メソッドを使います。これはJava特有のハマりポイントです。
セミコロン忘れ
- × Error:
System.out.println("Hello") - ○ Pass:
System.out.println("Hello"); - 解説: Javaでは文末のセミコロン
;が絶対に必要です。一つ忘れるだけでコンパイルエラーになり、プログラムは一切動きません。
プリミティブ型のジェネリクス
- × Error:
List<int> list = ... - ○ Pass:
List<Integer> list = ... - 解説: ジェネリクス(
<>の中身)にはintなどのプリミティブ型は使えません。ラッパークラスであるIntegerを指定する必要があります。
JavaScript:Webの共通言語ゆえの罠
Web制作からアプリ開発まで幅広く使われますが、自由度が高い分、思わぬバグを生みやすい言語です。
ASI(自動セミコロン挿入)の罠
- × Error:
returnの後に改行して値を書く - 解説: JavaScriptはセミコロンを省略しても自動で補完してくれる機能(ASI)がありますが、
returnの直後で改行すると、そこで文が終わったとみなされ、undefinedが返ってしまいます。
タイポによる未定義エラー
- × Error:
functionn f() {} - 解説:
functionをfunctionnとタイプミスすると構文エラーになります。基本的な英単語のミスは、エディタのハイライト機能などを活用して防ぎましょう。
定数への再代入
- × Error:
const x = 10; x = 20; - 解説:
constで宣言した変数は「定数」扱いとなり、再代入できません。値を変更する必要がある場合はletを使いましょう。
TypeScript:型安全という名の鎧
JavaScriptに「型」の概念を持ち込んだ言語です。コンパイルエラーを正しく理解することが重要です。
型不一致
- × Error:
let x: number = "10"; - 解説: 数値型(
number)と定義した変数に、文字列("10")を代入しようとするとエラーになります。これがTypeScriptを使う最大のメリットであり、バグを未然に防いでくれます。
Any型への逃げ
- × Error:
const x: any = ... - 解説: エラー(文法的にはパスしますがバグの温床)です。
any型を使うと、TypeScriptの型チェックを無効化してしまいます。どうしても型がわからない場合を除き、anyの使用は避けるべき「BAD」なプラクティスです。
PHP:Webサーバーサイドの王道
WordPressなどでも使われるPHPは、記号の使い方が他の言語と少し異なります。
変数の$マーク忘れ
- × Error:
echo name; - ○ Pass:
echo $name; - 解説: PHPの変数は必ず
$で始まります。他の言語に慣れていると忘れがちですが、これがないと定数として扱われたりエラーになったりします。
文字列連結の記号
- × Error:
echo "Hello" + "World"; - ○ Pass:
echo "Hello" . "World"; - 解説: 多くの言語では
+で文字列を連結しますが、PHPでは.(ドット)を使います。PHPで+を使うと、無理やり数値として足し算しようとしてしまいます。
C# (C Sharp):WindowsとUnityの主役
Javaに似ていますが、より現代的な機能が多く盛り込まれています。
JavaScriptとの混同
- × Error:
console.log("Hi"); - ○ Pass:
Console.WriteLine("Hi"); - 解説: C#でのコンソール出力は
Console.WriteLineです。JSやPythonなど、複数の言語を扱っていると混同しがちです。
厳密な真偽値
- × Error:
if (1) { ... } - 解説: C++やJSと違い、C#の
if文にはbool(true/false)しか渡せません。数値の1や0を条件式に直接使うことはできません。
Ruby:書くのが楽しい言語
直感的で書きやすい言語ですが、独特のルール(シンボルなど)があります。
end 忘れ
- × Error:
def hello... (endがない) - 解説: メソッド定義や
if文、ブロックの最後には必ずendが必要です。インデントが正しくてもendが抜けていると構文エラーになります。
ハッシュの記法
- × Error:
hash = { "key": "val" } - ○ Pass:
hash = { key: "val" } - 解説: エラーではありませんが、Rubyではハッシュのキーに「シンボル(
:key)」を使うのが一般的かつ高速です。文字列キーとの混在はバグの元になります。
Go (Golang):クラウド時代のC言語
Google発の言語で、シンプルさと並行処理が特徴ですが、作法にはうるさい一面があります。
変数の再宣言
- × Error:
x := 10のあとにx := 20 - 解説:
:=は「宣言と代入」を同時に行う演算子です。同じスコープ内で同じ変数を二度宣言することはできません。2回目以降は単なる代入(=)を使います。
nil の扱い
- × Error:
err := nil - 解説: Goでは、
nil自体には型情報がありません。変数を宣言する際に型を明示するか、型のある値として扱わないとエラーになります。
Swift:iOSアプリ開発の標準
Apple製品向けの言語で、安全性(Safety)を重視した設計になっています。
定数と変数
- × Error:
const x = 10 - ○ Pass:
let x = 10 - 解説: Swiftで定数を定義するのは
letです。JSのようにconstではありません。変数はvarですが、可能な限りletを使うのがSwift流です。
オプショナル型
- × Error:
let x: Int = nil - ○ Pass:
let x: Int? = nil - 解説: Swiftでは通常、変数に
nil(空)を入れることはできません。nilを許容するには、型の後ろに?をつけた「オプショナル型」にする必要があります。
Kotlin:Android開発のデファクト
Javaとの互換性を持ちつつ、より簡潔に書ける言語です。
val と var
- × Error:
const val x = 10(関数内で) - ○ Pass:
val x = 10 - 解説:
const valはコンパイル時定数で、トップレベルなどでしか使えません。ローカル変数の定数はvalだけで宣言します。
Switch文ではない
- × Error:
switch (x) { ... } - ○ Pass:
when (x) { ... } - 解説: Javaの
switchに相当する構文は、Kotlinではwhenです。より強力で柔軟な条件分岐が可能です。
HTML/CSS:Webの基礎体力
プログラミング言語ではありませんが、Webに関わるなら避けて通れないマークアップ言語です。
閉じタグの不整合
- × Error:
<div>...</span> - 解説: 開いたタグ(
div)と閉じるタグ(span)が異なると、レイアウト崩れの大きな原因になります。入れ子構造(ネスト)のミスはブラウザの表示を大きく壊します。
スペルミス
- × Error:
witdh: 100px; - ○ Pass:
width: 100px; - 解説: CSSプロパティのタイポはエラーメッセージが出ないため、非常に気づきにくいバグです。「なぜかスタイルが効かない」という時は、まずスペルを疑いましょう。
Shell (Bash):サーバー管理の要
Linuxサーバーの操作や自動化スクリプトで使われます。スペース一つに命がかかります。
代入のスペース
- × Error:
VAR = value - ○ Pass:
VAR=value - 解説: 多くの言語では代入演算子(
=)の前後にスペースを入れますが、シェルスクリプトではスペース厳禁です。スペースを入れると、VARというコマンドを実行しようとしてエラーになります。
破壊的コマンド
- × Error:
rm -rf / - 解説: 「ルートディレクトリ以下を強制的に削除する」というコマンドです。管理者権限でこれを実行するとシステムが消滅します。実務では絶対に書いてはいけない、最大のタブーです。
エラーメッセージは「答え」を教えてくれている
プログラミングに慣れていないうちは、真っ赤なエラーメッセージが出ると「何か壊してしまったのではないか」とドキッとするかもしれません。
ですが、エラーメッセージは「何行目の、何がおかしいか」を教えてくれる、頼れるヒントです。
この「コードレビュー道場」で様々なエラーのパターンを知っておけば、いざ実務でエラーが出た時も、「あ、これはあの時のパターンだ」と冷静に対処できるようになるはずです。
まずはゲーム感覚で、5つの言語の「あるある」を体感してみてください。
そして、もし業務で似たようなコードを見かけたら、心の中でそっと「いいね!」と承認してあげてください。
あなたの現場に「ちょうどいい」を。
あなたのお困りごとに、
本気で向き合います。
独自カスタム
不満を解消する
ピンポイント修正
実務伴走
隣で一緒に働く
事務サポート
仕組み改善
現場に馴染む
フローの再構築
「うしろぽっけ」に
今の悩みをそのままぶつけてください。