この記事の結論
- setup()は電源を入れた直後に1回だけ実行される「準備」の場所、loop()は電源が入っている間ずっとくり返される「本番」の場所
- 変数は値を入れておく箱のようなもので、int・float・boolの3つの型を覚えておけば大半のスケッチが書ける
- if文は「もし〜なら〜する」という条件分岐で、比較の「==」と代入の「=」の取り違えが初心者の定番ミス
- 難しい用語を1つずつ覚えるより、実際のLチカのコードを1行ずつ読み解いた方が理解が早い
Arduinoを始めたばかりの人がつまずきやすいのが、キットの通りに部品はつなげたのに、コード(スケッチ)の中で何が起きているのかがさっぱり分からない、という壁です。
「setup」「loop」「int」「if」といった単語が並んでいるだけで、プログラミング未経験者には呪文のように見えてしまいます。
この記事では、Arduinoのスケッチに必ず登場する最低限の仕組み(setup/loop・変数・if文)を、プログラミングの経験が一切ない人向けに、順番にやさしく解説します。
「スケッチ」とは何か、Arduinoにおけるプログラムの呼び方
Arduinoの世界では、マイコンボードに書き込むプログラムのことを「スケッチ」と呼びます。
一般的なプログラミング用語で言えば「ソースコード」とほぼ同じ意味ですが、Arduinoでは慣習的に「スケッチ」という呼び方が定着しています。
Arduino IDEでスケッチを保存すると、拡張子は「.ino」というファイルになります。
IDEの基本的な使い方(インストール・初期設定・実際の書き込み手順)は、Arduino IDEのインストール・初期設定・書き込み方法の記事で詳しく解説しています。
この記事では、書き込む前の段階、つまり「スケッチの中に何を書けばいいのか」という部分に絞って解説していきます。
すべてのスケッチに共通する土台、setup()とloop()
Arduinoのスケッチには、どんなに単純な工作でも必ず2つの「部屋」が用意されています。
それがsetup()とloop()という2つの関数です。
setup()は最初の1回だけ実行される準備の部屋
setup()の中に書いた処理は、Arduinoの電源を入れた瞬間、またはリセットボタンを押した瞬間に、ちょうど1回だけ実行されます。
ピンをどう使うかの宣言(pinMode)や、シリアル通信を始める準備(Serial.begin)など、「最初に一度だけ済ませておけばいい設定」をここに書きます。
たとえば「8番ピンをLEDの出力用に使う」と決めるなら、setup()の中にpinMode(8, OUTPUT);と1行書くだけです。
loop()は電源が入っている間ずっとくり返される部屋
setup()の処理が終わると、Arduinoは自動的にloop()の中身の実行を始めます。
loop()の中身は、最後の行まで実行し終わるとまた先頭に戻り、電源が切れるまで永遠にくり返されます。
LEDを点滅させる、センサーの値を定期的に読み取る、ボタンが押されたか確認する、といった「くり返し続けたい処理」はloop()の中に書きます。

変数、値を入れておく「箱」の考え方
変数とは、数値や状態を一時的に保存しておくための「箱」のようなものです。
箱には名前(変数名)を付け、中に入れる値の種類(型)をあらかじめ決めておく必要があります。
よく使う3つの型(int・float・bool)
Arduinoのスケッチで特によく使う型は、次の3つです。
| 型 | 入る値 | 使用例 |
|---|---|---|
| int | 整数(小数点なし) | センサーの読み取り値、ピン番号、しきい値 |
| float | 小数を含む数値 | 温度・湿度の値、計算結果 |
| bool | true(真)かfalse(偽)の2択 | ボタンが押されているかどうかの状態 |
たとえば「LEDをつなぐピン番号」を変数にするなら、int ledPin = 8;のように書きます。
これで「ledPin」という名前の箱に、整数の8という値が入った状態になります。
以降のコードでは、8という数字を直接書く代わりにledPinという名前を使えるようになります。

変数名のつけ方とconstの使いどころ
変数名は、半角英数字と一部の記号(アンダースコアなど)で、数字から始めない名前をつけます。
「ledPin」「sensorValue」のように、何が入っているかひと目で分かる名前にしておくと、後から見返したときに読みやすくなります。
ピン番号やしきい値のように、スケッチの実行中に値が変わらないものには、const int ledPin = 8;のように先頭にconstを付けるのが一般的です。
constを付けておくと、うっかりその値を書き換えるコードを書いてしまった場合にエラーで教えてくれるため、意図しないバグを防げます。
if文、条件によって処理を分ける仕組み
if文は、「もし〜という条件が成り立つなら、この処理をする」という条件分岐を書くための仕組みです。
if / else の基本形
基本の形は、if (条件) { 条件が成り立つときの処理 } else { 成り立たないときの処理 }です。
たとえば「センサーの値が500より大きければLEDを点灯し、そうでなければ消灯する」なら、次のように書きます。
if (sensorValue > 500) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
elseの部分は省略することもでき、「条件が成り立ったときだけ何かする」というシンプルな使い方も可能です。
比較演算子(==, >, <, !=)の意味
if文の条件部分でよく使う記号は、次の4つです。
==:左右が等しいかどうか(等しいならtrue)>/<:左が右より大きい/小さいかどうか!=:左右が等しくないかどうか
よくある間違い、「=」と「==」の取り違え
初心者が最もよくやってしまうミスが、比較の「==」を代入の「=」と書き間違えてしまうことです。
「if (sensorValue = 500)」のように「=」を1つだけ書いてしまうと、比較ではなく「sensorValueに500を代入する」という別の処理になり、代入した値が0以外なら常に条件が成立してしまいます。
「LEDが常に点灯したままになる」「条件分岐がまったく機能していない」というときは、まずif文の中の「=」の数を数えてみてください。

実際の簡単なスケッチを1つずつ読み解いてみる
ここまでの内容を踏まえて、これまで登場した変数の例に合わせ、Lチカの配線を8番ピンに置き換えた場合のスケッチを、setup/loop/変数の観点で読み解いてみます。
const int ledPin = 8; // ← 変数(int型)、LEDをつなぐピン番号
void setup() {
pinMode(ledPin, OUTPUT); // ← setup()、最初に1回だけ実行
}
void loop() {
digitalWrite(ledPin, HIGH); // ← loop()、点灯
delay(1000); // 1秒待つ
digitalWrite(ledPin, LOW); // 消灯
delay(1000); // 1秒待つ
}
1行目の「const int ledPin = 8;」は、8番ピンという値を入れた変数を用意している行です。
setup()の中の「pinMode(ledPin, OUTPUT);」は、そのピンをLEDへの出力用として使うという設定を、電源投入直後に1回だけ行っています。
loop()の中は、点灯→1秒待つ→消灯→1秒待つ、という4行が延々とくり返され、これが「点滅しているように見える」正体です。
なお、はじめてのLチカの記事で実際に配線するスケッチでは、ピン番号を8番ではなくLED_BUILTIN(Unoでは13番ピンを指す特別な名前)で指定しています。
配線を13番ピンにする場合は、1行目をconst int ledPin = LED_BUILTIN;に書き換えれば、以降のコードはそのままで動作します。
実際の回路の組み方や、書き込んで動かすところまでの手順は、はじめてのLチカに挑戦する記事で写真付きで解説しています。
紹介した商品:LED 10色セット 200個入り
DiCUNO 発光ダイオード 3mm 10色 透明LEDセット 各20個入り 200個セット
赤・青・緑など10色が揃っているので、音の高さごとに光らせる色を変える演出にも使いやすいセットです。
Amazon ¥749(200個入り)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
もしif文を使って「ボタンが押されている間だけ点灯する」ように改造したくなったら、上のif文の説明を思い出しながら、digitalRead()の値で条件分岐を組んでみてください。
ボタン(タクトスイッチ)を使った具体的な配線・コードの組み方は、別の記事で詳しく整理しています。
紹介した商品:タクトスイッチ(6mm角)
uxcell タクトスイッチ 6x6x7mm 4ピン 100個
ブレッドボードに挿せる6mm角の4ピンタイプ。100個入りなので、ボタンを何個使う工作でも足ります。
Amazon ¥907(100個入り) / 楽天市場 ¥955(100個入り)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
まとめ:プログラミング未経験者がつまずきやすいポイントのチェックリスト
最後に、スケッチを読み書きするときによくあるつまずきポイントを表にまとめます。

| 症状 | よくある原因 | 確認ポイント |
|---|---|---|
| コンパイルエラーで進まない | セミコロン(;)の付け忘れ、波かっこ{}の閉じ忘れ | エラーメッセージに出ている行番号の前後を確認 |
| 代入した値が0以外なら常に条件が成立してしまう | 「==」と「=」の取り違え | if文の中の等号の数を数え直す |
| 点滅が速すぎて常時点灯しているように見える | loop()の中でdelay()を入れ忘れている | 意図した速さでくり返されているか確認 |
| 変数の値がおかしくなる | int型に小数を入れている、桁あふれ | floatが必要な値かどうかを見直す |
取り組む前に、以下の点がなんとなくつかめているか確認してみてください。
- setup()は1回だけ、loop()はくり返し実行されるという役割の違いの見当がついている
- int・float・boolという3つの型のだいたいの使い分けが分かっている
- if文の「==」が比較、「=」が代入という違いを意識できるようになっている
スケッチの構造がなんとなくつかめたら、次は動かしたいセンサーやモジュールに合わせて、ライブラリを追加していく段階に進みます。
ライブラリのインストール方法やよくあるトラブルについては、別の記事で詳しく整理しています。


コメント