ノーコードツールを使うときに知っておきたいこと

プログラムの基本構造はたったの”3つ”

つぎは、プログラムの基本構造について確認しましょう。
Write your awesome label here.

1. プログラムの基本構造とは?

プログラミングが「コンピュータを動かすための指示書(=プログラム)を作ること」、ということは確認しましたが、プログラミングやプログラムという言葉を聞くと、「ちょっと難しそう…」と思ってしまいませんか?
ただ、ひも解いていくと、実はプログラムの基本構造は単純なのです。

ここでは、各処理の名前はそれほど重要ではなく、「どのような処理の流れになるのか?」をポイントとして、いくつか例を見ながらプログラムの基本構造を確認してみましょう。
さて、プログラムの基本構造とは何でしょうか。

プログラムの基本構造は、「順次」「分岐」「反復」の”たったの3つ”の処理を組み合わせたもの。

みなさんが日頃使っているアプリやゲームなどは、複数のプログラムの集まりですが、実は「順次」「分岐」「反復」という”たった3つ”の基本的な処理がいくつも組み合わさって作られているのです。
”たった3つ”と聞くと、難しさが和らぎませんか?

また、使うツールによって、「順次」「分岐」「反復」処理を実現するための機能名が異なる場合がありますが、機能名が異なっていたとしても考え方はすべて同じですので、一度覚えてしまえば、いろいろなツールで活用できます。
詳細はあとで確認するので、これから学ぶプログラムの基本構造の基礎知識が、具体的にどのようなシーンで活用できるか、以下の例をもとにざっくりと確認してみましょう。

以下は「順次」「分岐」「反復」の3つの処理を組み合わせて、「CSVファイルのデータをデータベースにインポートする」というプログラムの流れをおおまかに記述した例です。
CSVファイルのデータをデータベースにインポートする流れ
  • インポート対象のCSVファイルのパスを指定する
  • 実際に対象のCSVファイルが存在するかをチェックする
  • CSVファイルの全データに対して、つぎの処理を繰り返す
CSVファイルを1行ずつ読み込み、データに問題がなければデータベースにインポートし、問題があればエラーメッセージを表示する
このプログラムの流れのように、データの処理は通常、特定の順序で行われる必要があります。順次処理を理解することで、正しい順序で処理を実行できるようになり、データの一貫性と精度を保てます。

また、データ処理では、条件に応じて異なる処理を実行するという場合があります。データの整合性をチェックしたり、特定の基準を満たすデータのみを分析に使用したり、といったシナリオです。分岐処理(条件分岐)を理解することで、状況に応じた柔軟なデータ処理ができるようになります。

さらに、反復処理(ループ処理)を理解することで、手動で行う作業を自動化し、時間と労力を大幅に節約できる仕組みを構築できるようになります。
少しイメージがつきましたか?
それでは、各処理の具体的な仕組みについて、「
フローチャート」をもとに確認していきましょう。
フローチャートとは、図形や矢印を使ってプログラムの流れをわかりやすく示した図解のことです。「フロー図」ともいいます。フローチャートを使うことで、直感的に構造を理解しやすくなるので、プログラムの流れだけではなく、業務プロセスの流れなどを示すときにもよく使われます。
よく使われるフローチャートの記号
開始 / 終了
フローチャートの開始と終了を表わす記号です。
フローチャートの最初と最後に配置され、記号内に「開始」と「終了」を記述します。 
処理
処理の内容を表わす記号です。
記号内に処理の内容を記述します。 
条件分岐
分岐処理を表わす記号です。
記号の中に条件を記述します。
反復処理の開始 / 終了
繰り返し処理を表す記号です。
繰り返し処理の開始記号と終了記号の間に処理内容を記述します。
なお、このコンテンツでは、処理の一部をクローズアップしてご紹介しているので、「開始」と「終了」の記号は使用していません。
また、コンテンツ上、見やすいように各記号を色分けしていますが、色自体に特定の意味がある訳ではありません。

2. 順次処理(順番)とは?

まず、順次処理から確認してみましょう。

順次処理とは、最初から順番に一つずつ指示どおりに実行していくこと。

順次処理の流れ

プログラムは基本的に記述した順番で実行されるので、先に実行したい処理は先(この例では上)に書くようにします。
例えば、つぎのように順番に実行する処理が「順次処理」です。
  • 変数「name」に「山田 太郎」を代入する
  • 変数「birthday」に「2004/11/23」を代入する
  • 変数「name」と変数「birthday」のデータを使って、メッセージ「nameの誕生日はbirthdayです」を表示する
結果
変数名で指定したデータが参照されるので、メッセージには「山田 太郎の誕生日は2004/11/23です」と表示されます。

3. 分岐処理(条件分岐、場合分け)とは?

ふたつめは、分岐処理について確認してみましょう。

分岐処理とは、指定した条件によって実行の流れを変えること。

分岐処理の流れ

もし、そうならば」、「そうでないならば」という条件を使って、何を実行するのかを決めます。Microsoft Excelなどの表計算ソフトで「IF関数」を使ったことがある方は、イメージがつきやすいのではないでしょうか。
順次処理では、記述した順番どおりに指示をひとつずつ実行していきますが、 そこに分岐処理で条件を組み合わせると、途中で指示を場合分けし、動きを変えられるようになります。
分岐処理は、プログラミング言語では「IF文」や「CASE文(switch文)」と呼ばれるものに相当します。
ここでは、分岐処理で、分岐が2つのパターンとそれ以上のパターンを確認してみましょう。

分岐が2つのパターン

例 ①
まずは、分岐が2つの基本的なパターンを確認してみましょう。
例えば、得点データが80点以上か未満か、という1つの条件で処理を分岐するとしましょう。
その場合は、つぎの②のように1つだけ分岐処理を指定します。

  • 変数「score」に得点データ「90」点を代入する
  • 変数「score」の得点データが80点以上なら「合格です」、80点未満なら「不合格です」のメッセージを表示する
結果
得点データは「90」点なので、メッセージには「合格です」と表示されます。

分岐が3つ以上のパターン

例 ①では、分岐が2つのパターンを確認しましたが、1つの条件(比較対象)に対して分岐が3つ以上のパターンになる場合もあります。その場合、どのような構造になるのかを確認してみましょう。

ここでは、同じ分岐の条件に対して、2つの実装例をご紹介します。
例 ② - 1は、一般的に「IF(THEN、ELSE)」という機能、例 ② - 2は「CASE(switch)」という機能を使った場合の例です。

なお、IFとCASE(switch)のどちらを使うのが正しいといった明確なルールはないので、可読性などを考慮して使いわけるとよいでしょう。例えば、開発プロジェクトによっては可読性を考慮し、「IFの入れ子構造は基本3レベルまで」のように規約が決まっている場合もあります。

例 ② - 1
入れ子(ネスト)構造で処理を分岐する

分岐処理の中にさらに分岐処理の条件を指定する(「入れ子」または「ネスト」といいます)
ことで実行できます。
一般的に「IF(THEN、ELSE)」と言われる機能を使った場合の例です。
例えば、得点データが80点以上なら「Aランク」、60点以上80点未満なら「Bランク」、60点未満なら「Cランク」のように分岐が複数の場合を例に確認してみましょう。
「IF」と言われる機能を使った分岐の条件は、「はい」か「いいえ」の2パターンの条件しか指定できませんので、分岐が複数ある場合は1つずつ分岐の条件を指定します。
  • 変数「score」に得点データ「70」点を代入する
  • 変数「score」の得点データが80点以上なら「Aランクです」のメッセージを表示し、80点未満ならつぎの処理を実行する
  • 変数「score」の得点データが60点以上なら「Bランクです」のメッセージを表示し、60点未満ならつぎの処理を実行する
  • 上記「2」と「3」のいずれの条件とも合致しない(60点未満)なら、「Cランクです」のメッセージを表示する
結果
得点データは「70」点なので、メッセージには「Bランクです」と表示されます。
例 ② - 2
「CASE(switch)」を使って、シンプルに処理を分岐する

ここでは、例②-1を「CASE(switch)」で分岐を表す例を確認してみましょう。
ツールで「CASE」や「switch」などの機能が使えると、上記の例②-1のように入れ子構造にするのではなく、つぎの図のように並列で条件を指定できるようになるのでシンプルな構造にできます。

(参考)「AND」や「OR」を使うと、複数の条件をまとめて指定できる

論理演算子と呼ばれる「AND」や「OR」を使って条件を連結すると、複数の条件をまとめて判定できるようになります。
「AND」は「かつ」、「OR」は「または」という意味で、複数の条件を1つにまとめられます。

AND条件を使うパターン

AND条件を使って、複数の条件を指定する

AND条件を使うと、「連結したすべての条件にあてはまるかどうか」のように、複数の条件を同時に判定できるようなります。
ここでは、AND条件を使って2つの条件を1つにまとめる例を確認してみましょう。
例えば、会員種別が「プレミアム会員」で、「購入金額が1万円以上の場合」は送料を無料にし、そうでない場合は送料を一律500円とする場合を例に確認してみましょう。

この場合、上記「分岐が2つ以上のパターンの例②-1」のように分岐処理の中にさらに分岐処理の条件を指定することでも実行できますが、「AND」条件を使うと2つの条件を1つにまとめられます。
  • 変数「memberType」に会員種別「プレミアム」、変数「purchasePrice」に購入金額「2万円」を代入する
  • 変数「memberType」のデータが「プレミアム」で、かつ変数「purchasePrice」のデータが「2万円」以上なら、「送料は無料です」、そうでないならば「送料は500円です」のメッセージを表示する
結果
会員種別は「プレミアム」で、購入金額は「2万円」なので、メッセージには「送料は無料です」と表示されます。

OR条件を使うパターン

OR条件を使って、複数の条件を指定する

OR条件を使うと、「連結したいずれかの条件にあてはまるかどうか」のように、複数の条件を同時に判定できるようなります。
ここでは、OR条件を使って、2つの条件を1つにまとめる例を確認してみましょう。
例えば、会員種別が「プレミアム会員」か、「初回購入の場合」は送料を無料にし、そうでない場合は送料を一律500円とする場合を例に確認してみましょう。
  • 変数「memberType」に会員種別「レギュラー」、変数「purchaseCount」に購入回数「1回」を代入する
  • 変数「memberType」のデータは「レギュラー」、または変数「purchaseCount」のデータが「1回目」ならば、「送料は無料です」、そうでないならば「送料は500円です」のメッセージを表示する
結果
会員種別は「レギュラー」ですが、購入回数は「1回目」なので条件に合致し、メッセージには「送料は無料です」と表示されます。

4. 反復処理(繰り返し、ループ)とは?

最後は、反復処理について確認してみましょう。

反復処理とは、指定した条件までくり返して実行すること。

反復処理の流れ

何回繰り返すかは、繰り返しの条件で指定します。
反復処理は、プログラミング言語では一般的に「for文」や「while文」と呼ばれるものに相当するものです。

なお、ツールによっては、その特性に応じて繰り返しの条件のパターンごとに使う機能をあらかじめわけて用意している場合があります。
例えば、「○回繰り返す」、「条件を満たす間繰り返す」、「〇〇が終わるまで繰り返す」といったパターンです。
「このパターンのときは必ずこの機能を使う」といった決まりはありませんので、わかりやすく反復処理を表現できるものを使うことをおすすめします。詳細は、使うツールを確認してくださいね。

ここでは、それぞれのパターンをどのようなシーンでよく使うのかを例を踏まえて確認してみましょう。

条件「○回繰り返す」を使うパターン

例 ①
「100回繰り返す」のように、一般的にはあらかじめ具体的な繰り返す回数がわかっているときに使います。
例えば、「あるメッセージを100回表示する」という処理を実行するとしましょう。
順次処理だと、左の図のようにメッセージを表示する処理を100行書く必要がありますが、反復処理ではメッセージを表示する処理を1行書いて、「100回繰り返す」という繰り返し条件を指定するだけなので、すっきりとしたプログラムを作成できることがわかりますね。

条件「条件を満たす間繰り返す」を使うパターン

例 ②
2つ目は、指定した条件を満たす間は処理を繰り返すパターンです。
つまり、このパターンでは分岐処理のように「条件を満たすか、満たさないか」を条件として、条件を満たさなくなったら繰り返し処理を終了します。
条件には、「AND条件」や「OR条件」などを使って複数の条件も指定できます。

終了の条件は決まっていても、繰り返す回数が不定の場合
に使います。
例えば、フォーム入力後に表示される確認メッセージに対して、「はい」と回答されたら(つまり、「いいえ」と回答するまで)フォームを表示するという繰り返し処理を実行するとしましょう。
このような場合、「はい」と何回回答されるかは不定ですよね。そのような場合は、「条件を満たす間繰り返す」として繰り返し条件を指定します。

なお、この例では、まず処理を実行してから繰り返し条件の判定を行っています。
  • フォームを表示する
  • 「つづけて入力しますか?」という確認メッセージを表示する
  • 「はい」と回答される間(=「いいえ」と回答されるまで)繰り返しフォームを表示する
    つまり、「はい」と回答された場合はフォームを表示し、「いいえ」と回答された場合は繰り返し処理を終了することになります
条件を満たすことができずに「反復処理」が永遠に終わらないことを「無限ループ」といいます。
あり得ない条件を指定すると、ずっと同じ処理を繰り返してしまい、強制的にプログラムを止めない限り、実行し続けてしまいます。うっかり無限ループにならないように、指定する条件には注意してくださいね。

条件「〇〇が終わるまで繰り返す」を使うパターン

例 ③
CSVファイルやテーブルのようにいくつかまとまったレコードがあり、そのレコードが何件あるかはわからないが、「レコードの件数分繰り返す」といった条件を指定したいときに使うと便利です。
例えば、「社員テーブル内のすべての社員番号を表示する」という処理を実行するとしましょう。

この場合、反復処理の繰り返し回数は「社員テーブルの件数」ということになりますが、社員テーブルは追加や削除で変更が発生し、毎回件数が異なります。
そのため、反復処理の条件に具体的な繰り返し回数や、「社員テーブルの件数が0件になったら」といった終了条件を指定する場合、反復処理の前に社員テーブルの件数を取得してあらかじめ任意の変数に格納しておき、件数を管理する処理などが必要になります。

それに対して、この例 ③のパターンを使うと、自分で件数を取得しなくても、反復処理の中で「レコードの読み込みが終わるまで(=レコードの件数分)繰り返す」のように「〇〇が終わるまで繰り返す」といった条件を指定すればよいだけなので、ひと手間減らせるというわけです。

(参考)いま、何回目の処理かをどうやって確認する?

「いま、何回目の処理を実行しているか?」を知りたいときはどうしたらよいでしょうか。

ツール側で何回目かを確認できるカウンタ用の変数が用意されていることもありますが、用意されていない場合は、カウンタ用の変数を自分で用意します。
「何回目」の処理なのかを確認できると、つぎのようなメリットがあります。
  • 最後の反復処理が終わったときに変数「count」のデータを確認すると、全部で何レコードだったのかというレコードの総数を確認できるようになります。
  • 変数「count」のデータをログなどに出力するようにしておくと、反復処理の途中で何らかのエラーで処理が中断されてしまった場合、何レコード目でエラーが発生したのかが確認でき、原因調査の助けとなります。

カウンタ用の変数を用意してカウントアップ処理を追加する

「何回目か?」という情報は、反復処理の中にカウンタ用の変数と足し算を使ってカウントアップする処理を追加することで確認できるようになります。
例えば、 例 ③の「〇〇が終わるまで繰り返す」を使うパターンの場合、つぎのような処理を追加するとよいでしょう。
  • 社員テーブルを読み込む
  • まだ1回も処理を実行していないので、反復処理を実行する前にカウンタ用の変数「count」(変数名は任意)に「0」を代入する
    なお、うっかり反復処理の中で代入してしまうと、反復処理が実行されるたびに変数「count」のデータは「0」に戻ってしまうので注意しましょう。
  • 処理が1回終わるごとに、変数「count」の値に「1」を足していく
    変数のデータを参照する、計算する」で確認したように、つぎのような計算式で確認できます。
count=count+1
  • 1回目の処理で、右辺は「0+1」となるので、変数「count」には「1」が代入される
  • 2回目の処理で、右辺は「1+1」となるので、変数「count」には「2」が代入される
     
    ・ ・ ・(以降省略)
    というように、「1」ずつカウントアップする処理を追加すると、変数「count」を使って「何レコード目(何回目)」かを確認できるようになります。
  • ループ処理を使うときに、ある条件になったら「ループ処理を途中で抜けたい」、「該当のループ処理だけスキップしたい」という状況になる場合があります。
    その場合は、
    break」や「continue」という機能を使うと、ループ処理を制御できます。
    • breakとは?
      ループ処理を中断して、途中で抜けられます。
      ループ処理が入れ子構造の場合、最も内側の1つのループ処理から抜けられます。
    • continueとは?
      ループ処理の途中で、残りの処理をスキップして次のループ処理に移れます。
    break文が対象のループ処理全体を終わらせてしまうのに対して、continue文は残りの処理をスキップして、次のループ処理を開始するという点に違いがあります。

    5. "3つ"の処理を組み合わせる

    これまで、「順次処理」、「分岐処理」、「反復処理」をそれぞれ確認してきましたが、実際のプログラムでは、これらの処理を組み合わせて実行することが多いです。
    また、「3. 分岐処理(条件分岐、場合分け)とは?」で、「分岐処理」を入れ子構造で指定する例を確認しましたが、「反復処理」を入れ子構造(多重ループ)で使う場合もあります。
    「順次処理」、「分岐処理」、「反復処理」を組み合わせる

    それぞれの処理を組み合わせた簡単な例を確認してみましょう。
    例えば、「顧客テーブルの中から、『都道府県』が”東京”のデータを抽出してCSVファイルに出力する」という処理を実行するとしましょう。
    • 顧客テーブルを読み込む
    • ここでは、顧客テーブルのすべてのレコードに対して処理を実行したいので、「レコードの件数分繰り返す」という反復処理を使って、1レコードずつ処理を繰り返し実行するように指定する
    • 各レコードの『都道府県』のデータをチェックしたいので、変数「prefectures」に読み込んだレコードの『都道府県』のデータを代入する
    • 分岐処理を使って、変数「prefectures」のデータが”東京”かどうかを判定する。
      • データが”東京”の場合は、対象のレコードをCSVファイルに出力する
      • それ以外の場合は、何も処理を行わず反復処理を継続する
    • 顧客テーブルのすべてのレコードを読み込み終わったら反復処理を終了する

    6. まとめ

    いかがでしたか?
    複数の処理を組み合わせてプログラムは成り立ちますが、プログラムの構造をひも解けば、「順次」「分岐」「反復」の”たったの3つ”の処理の組み合わせであるということは覚えておいてくださいね。