CFRPとは

「CFRP( Common Framework of Reference for Programming Skills)」とは、これまで定量的な評価が難しかったプログラミング能力について、プログラミング言語に寄らず、同一の基準で学習・教授・評価するための共通参照枠のことです。

1.CFRP策定の背景

小学校、中学校でのプログラミング教育の必修化に続き、2022年4月からは高等学校にて「情報Ⅰ」が必修化されるなど、いよいよプログラミングは一般教養として身につけるべき知識・技能として位置づけられるようになりました。また、2025年の大学入学共通テストにおいても「情報」が必須科目として追加され、今後社会で活躍するためには、プログラミングの知識が必要不可欠な能力となってきています。

一方で、これまでのプログラミング教育の歴史を見ると、公教育では、指導者そのものが不足しているほか、民間の教育機関においても目標設定や成果の証明の難しさから、プログラミングの学習者の意欲が継続しないという課題があります。こういった状況においては、限られた期間の中で「プログラミング必修化」という流れに社会全体がシフトすることは容易でないことは明らかです。

そういった中、プログラミング能力検定協会では2020年12月より、小学生~高校生を主な対象にプログラミング能力の基礎知識を測る「プログラミング能力検定」を開発、運営しており、2022年6月時点で全国2,000を超える民間教育機関、及び学校にて複数回の検定を実施してまいりました。このように、プログラミング教育において第一線を走り、研究をつづけてきたノウハウと実践知をもとに、より一層プログラミング教育の発展に貢献すべく、CFRPを策定するに至りました。

2.CFRPの詳細

CFRPは、汎用的且つ詳細な形でプログラミングの基礎知識を概念としてまとめ、その習得度を3つの段階(簡単な処理のプログラムを作成可能、複雑な処理のプログラムを作成可能、実用性の高いプログラムを作成可能)及び6つのレベルとして定義しています。(表①)
6つのレベルはさらに60以上のプログラミング概念に分解することができ、具体的にどのような知識が必要であるかを詳細に定義しています。(表②)

これにより、教育者あるいは教材の作成者は学習者の個々の習熟度に合わせた効果的な指導や評価が可能となり、限られた時間の中で最大限の教育効果を実現することができます。また、学習者は、自身のプログラミング能力を客観的かつ詳細に把握した上で明確な目標を設定することができるため、これまで以上に効果的な学習体験を得ることが可能になるほか、大学入学共通テスト受験において習得すべきレベルが把握できるなど、受験対策にも活用することが可能です。

<表①>

プログラミングの学習・教授・評価の
ための共通参照枠Common Framework of Reference for
Programming Skills(CFRP)

レベル

レベル

段階 レベル レベル毎に「何ができるか」を示した習熟度一覧
実用性の高い
プログラムを
作成可能
6 プログラムで複数の処理を同時に行うことができることを理解している。オブジェクト指向の基本的な概念を理解し、他の人が利用しやすいプログラムを作ることができる。
5 例外処理を理解し、より安定したプログラムを作ることができる。データ型の比較、多次元配列、ソートの理解により、複雑なデータ処理を行うことができる。
複雑な処理の
プログラムを
作成可能
4 定数の概念を理解し、使用することができる。繰り返しや分岐を様々な条件でコントロールする方法や配列要素の追加・削除・検索などの操作を理解し、複雑な処理のプログラムを自由に作ることができる。
3 変数の型について理解し、多様なデータをプログラムで扱うことができる。乱数の概念を理解し、使用することができる。関数の基本的な概念を理解し、効率的に可読性の高いプログラムを作ることができる。
簡単な処理の
プログラムを
作成可能
2 文字列の操作をすることができる。論理演算により複雑な条件を作成することができる。配列の基本的な概念を理解し、使用することができる。特定の条件下で処理を繰り返すことができ、簡単な処理のプログラムであれば自由に作ることができる。
1 簡単な演算、データの表示の方法を理解している。変数の基本概念を理解し、使用することができる。データの大小や一致/不一致の条件で処理を分岐させるプログラムを作ることができる。

<表②>プログラミング能力の共通評価指標

CFRPレベル6

区分 概念 評価指標
制御 並列処理・
非同期処理
複数の動作を同時に実行することができる

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
オブジェクト指向 連想配列の生成 連想配列を生成することができる
オブジェクト指向 連想配列の値の取得 連想配列の指定したキーの値を参照することができる
オブジェクト指向 連想配列の反復処理 連想配列の要素を繰り返し取得することができる
オブジェクト指向 クラスの定義 クラスを定義し、インスタンスを生成することができる
オブジェクト指向 コンストラクタ コンストラクタを使用して、インスタンス生成時にメソッドを自動的に実行することができる
オブジェクト指向 クラス内の変数 クラス内で宣言する変数を活用することができる
オブジェクト指向 メソッド クラスのメソッドを活用することができる
オブジェクト指向 クラスの継承 クラスを継承し、クラス内の変数やメソッドを活用することができる
オブジェクト指向 オーバーライド クラスを継承し、メソッドを上書きすることができる

CFRPレベル5

区分 概念 評価指標
制御 例外処理 例外が発生したときの処理を指定することができる

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
数的処理 剰余 除算の余りを求めることができる
変数 null 値が存在しないことを理解している
変数 型を調べる 指定した値や変数の型を調べることができる
変数 型の比較 「値と型が等しいとき」という条件を作成することができる
配列 要素の挿入 配列の指定の要素に値を挿入することができる
配列 要素の代入 配列の指定の要素に値を代入することができる
配列 多次元配列 配列の要素の中に配列を格納することができる
配列 順序の反転 配列の要素の並び順を反転させることができる
配列 配列のソート ソート機能を用いて配列の要素を並べ替えることができる

CFRPレベル4

区分 概念 評価指標
制御 反復処理(while文) while文を使用して処理を反復実行することができる

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
制御 反復スキップ処理 現在の反復処理の文の実行を終了し、次の反復処理を実行することができる
制御 反復抜け出し処理 反復処理やswitch文を中断して、次の処理を実行することができる
制御 条件分岐(switch文,case文) switch文、case文を使用して、条件によって動作を変えることができる
変数 定数宣言 定数を宣言、使用することができる
配列 要素の削除 配列の値を消去することができる
配列 要素の追加 配列に値を追加することができる
配列 要素の探索 配列に指定した値が含まれるかどうか確認することができる

CFRPレベル3

区分 概念 評価指標
変数 スコープ 定義された変数や関数を利用できる有効範囲を理解している

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
変数 変数型(数値,文字列) 変数に型があることを理解している
変数 変数型(boolean) true,falseを使用して、if文などの評価を行うことができる
変数 キャスト 変数の型を変更することができる
関数 関数 関数を宣言し、呼び出すことができる
関数 引数 呼び出し元から関数に値を渡すことができる
関数 返り値 関数から呼び出し元に値を返すことができる
配列 反復処理 配列の要素を順番に取り出すことができる
数的処理 乱数 乱数を作成し、使用することができる

CFRPレベル2

区分 概念 評価指標
制御 反復処理(for文) for文を使用して処理を反復実行することができる

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
制御 データ入力 ユーザが入力した値を取得することができる
演算子 文字列連結 文字列を連結することができる
演算子 論理積 「複数の条件が全て満たされたとき」という条件を作成することができる
演算子 論理和 「複数の条件のうちいずれかが満たされたとき」という条件を作成することができる
演算子 否定 「条件を満たさなかったとき」という条件を作成することができる
演算子 不等価 値や文字が「等しくないとき」という条件を作成することができる
配列 配列宣言 配列を宣言することができる
配列 配列の代入 配列に別の配列を代入することができる
配列 値の取得 添字を指定することで、要素の値を取得することができる
配列 配列の長さ 配列の長さを取得することができる

CFRPレベル1

区分 概念 評価指標
制御 順次実行 プログラムは上から順番に実行されることを理解している

ビジュアル言語/JavaScript/Python/Javaのコードはこちらからダウンロードできます

ダウンロード
制御 条件分岐(if文) if文を使用して条件によって動作を変えることができる
制御 条件分岐(if~else文) if~else文を使用して条件に合っている場合と合っていない場合で動作を分けることができる
制御 条件分岐(if~else if文) if~else if文を使用して複数の条件によって動作を変えることができる
制御 データ出力 値を出力することができる
数的処理 正負の数 正負の数を扱うことができる
数的処理 数字の大小 数字の大小で動作が変わることを理解している
演算子 四則演算 四則演算を行うことができる
演算子 等号 値や文字が「等しいとき」という条件を作成することができる
演算子 不等号 値が「~より大きい(小さい)とき」という条件を作成することができる
変数 変数の宣言 変数を宣言することができる
変数 変数代入 変数に値を代入することができる

3.CFRPのどのレベルを
目指すべきか?

2025年の大学入学共通テストより、プログラミングや情報リテラシーなどを扱う「情報科目」を出題することが発表されて、プログラミング教育に関する関心が高まっています。
もし、大学入学共通テストに向けて習得したいけれども、これまでプログラミングに関する学習をしたことがないという方であれば、まずはレベル1から学習を始めていき、最終的にレベル5を目指すのが良いでしょう。

一方で、これまでプログラミングに関する学習をされたことのある方については、上記の対応表を参考にご自分の現在の習得状況がどのレベルに当たるのかを確認して、ご自分に合ったレベルから学習されることをおすすめします。

4.CFRPとプログラミング能力
検定(プロ検)について

プログラミング能力検定協会が提供する「プロ検」はCFRPに準拠しています。 プロ検を受験いただくことで、CFRPに沿い現状のプログラミング能力値を測定・把握することが可能です。
現在、プロ検はビジュアル言語、テキスト言語(JavaScript・Python・Java)に対応しております。
プロ検はCFRPに準拠しているため、このように異なるプログラミング言語でも、同一の基準でプログラミング能力を測定・把握することができます。

レベル

レベル

CFRP プロ検レベル
段階 レベル プロ検テキスト
言語版
(JavaScript/Python/Java)
プロ検ビジュアル
言語版
実用性の高い
プログラムを
作成可能
6 6 -
5 5 -
複雑な処理の
プログラムを
作成可能
4 4 -
3 3 4
簡単な処理の
プログラムを
作成可能
2 2 3
1 1 2
1

プログラミング能力検定協会では、
公教育機関、民間教育機関問わず、
CFRPの指導・評価の実証にご協力
いただける団体を募集しております。

<お問い合わせ先>

プログラミング能力検定協会
メールでのお問い合わせ:info@programming-sc.com
お電話でのお問い合わせ:03-6912-8202

プログラミング能力検定協会
メールでのお問い合わせinfo@programming-sc.com
お電話でのお問い合わせ03-6912-8202