CFRPとは

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

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

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

<表①>

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

レベル

レベル

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

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

CFRPレベル6

区分 概念 評価指標 ビジュアルブロック JavaScript Python
制御 並列処理・
非同期処理
複数の動作を同時に実行することができる スクリプトを2つ使用 setTimeout
setInterval
clearInterval
async
await
asyncio.create_task
asyncio.sleep
オブジェクト指向 連想配列の生成 連想配列を生成することができる let arr = {
 key: value;
}
arr = {
 key: value
}
オブジェクト指向 連想配列の値の取得 連想配列の指定したキーの値を参照することができる arr.key arr[key]
オブジェクト指向 連想配列の反復処理 連想配列の要素を繰り返し取得することができる for..in for..in
オブジェクト指向 クラスの定義 クラスを定義し、インスタンスを生成することができる class class
オブジェクト指向 コンストラクタ コンストラクタを使用して、インスタンス生成時にメソッドを自動的に実行することができる constructor __init__
オブジェクト指向 クラス内の変数 クラス内で宣言する変数を活用することができる this.num self.num
オブジェクト指向 メソッド クラスのメソッドを活用することができる class Sample{
 method() {
 }
}
let sample = new
Sample;
sample.method();
class Sample:
 method():

sample = Sample
sample.method()
オブジェクト指向 クラスの継承 クラスを継承し、クラス内の変数やメソッドを活用することができる extends class()
オブジェクト指向 オーバーライド クラスを継承し、メソッドを上書きすることができる class ChildClass{
 function method(){
  super.method();
  f();
  }
}
class ChildClass:
 def method():
  super.method()
   f()

CFRPレベル5

区分 概念 評価指標 ビジュアルブロック JavaScript Python
制御 例外処理 例外が発生したときの処理を指定することができる try...catch,
throw,
error
try...except
raise
error
数的処理 剰余 除算の余りを求めることができる 〇を〇でわったあまり % %
変数 null 値が存在しないことを理解している null None
変数 型を調べる 指定した値や変数の型を調べることができる typeof type
変数 型の比較 「値と型が等しいとき」という条件を作成することができる === ==
配列 要素の挿入 配列の指定の要素に値を挿入することができる リストの〇番目に〇〇をいれる splice insert
配列 要素の代入 配列の指定の要素に値を代入することができる リストの〇番目を〇〇でおきかえる splice
arr[0] = num;
arr[0] = num
配列 多次元配列 配列の要素の中に配列を格納することができる [
 [ ],
 [ ]
];
[
 [ ],
 [ ]
]
配列 順序の反転 配列の要素の並び順を反転させることができる reverse reverse
配列 配列のソート ソート機能を用いて配列の要素を並べ替えることができる sort sort

CFRPレベル4

区分 概念 評価指標 ビジュアルブロック JavaScript Python
制御 反復処理(while文) while文を使用して処理を反復実行することができる 〇までくりかえす while ()
do{
}while ();
while :
制御 反復スキップ処理 現在の反復処理の文の実行を終了し、次の反復処理を実行することができる continue continue
制御 反復抜け出し処理 反復処理やswitch文を中断して、次の処理を実行することができる break break
制御 条件分岐(switch文,case文) switch文、case文を使用して、条件によって動作を変えることができる switch()
case
match :
 case
変数 定数宣言 定数を宣言、使用することができる const const
配列 要素の削除 配列の値を消去することができる リストの〇番目をけす splice
shift
pop
pop
clear
配列 要素の追加 配列に値を追加することができる リストに〇〇をついかするリストのさいご番目に〇〇をいれる splice
push
append
insert(0)
配列 要素の探索 配列に指定した値が含まれるかどうか確認することができる リストに〇〇がふくまれるリスト中の〇〇の場所 includes
indexOf
in
index

CFRPレベル3

区分 概念 評価指標 ビジュアルブロック JavaScript Python
変数 スコープ 定義された変数や関数を利用できる有効範囲を理解している グローバル・ローカル変数
変数 変数型(数値,文字列) 変数に型があることを理解している
変数 変数型(boolean) true,falseを使用して、if文などの評価を行うことができる let bool = true;
if (bool) {
}
bool = True
if (bool):
変数 キャスト 変数の型を変更することができる parseInt
Number
String
int()
float()
str()
関数 関数 関数を宣言し、呼び出すことができる 関数を作る function func() {
}
func();
def func():

func()
関数 引数 呼び出し元から関数に値を渡すことができる 数字・文字の引数,
条件の引数
function func(num) {
}
func(num);
def func(num):

func(num)
関数 返り値 関数から呼び出し元に値を返すことができる function func(num) {
 return num + 1;
}
def func(num):
 return num + 1

func(num)
配列 反復処理 配列の要素を順番に取り出すことができる リストの"変数"番目 for ( .. of )
forEach
for (.. in)
数的処理 乱数 乱数を作成し、使用することができる 〇から〇までのらんすう Math.random import random

num = random.random()

CFRPレベル2

区分 概念 評価指標 ビジュアルブロック JavaScript Python
制御 反復処理(for文) for文を使用して処理を反復実行することができる ずっと,〇回くりかえす for () for i in range()
制御 データ入力 ユーザが入力した値を取得することができる あなたのお名前は?と聞いて待つ input()
演算子 文字列連結 文字列を連結することができる 〇と〇 " " + " " " " + " "
演算子 論理積 「複数の条件が全て満たされたとき」という条件を作成することができる 〇〇かつ〇〇 && and
演算子 論理和 「複数の条件のうちいずれかが満たされたとき」という条件を作成することができる 〇〇または〇〇 || or
演算子 否定 「条件を満たさなかったとき」という条件を作成することができる 〇〇でない ! not
演算子 不等価 値や文字が「等しくないとき」という条件を作成することができる 〇〇でない != !=
配列 配列宣言 配列を宣言することができる リストを作る let arr = []; arr = []
配列 配列の代入 配列に別の配列を代入することができる let arr = [1, 2];
arr= [0, 1];
arr = []
arr = [0, 1]
配列 値の取得 添字を指定することで、要素の値を取得することができる リストの〇番目 arr[0] arr[0]
配列 配列の長さ 配列の長さを取得することができる リストの長さ length len()

CFRPレベル1

区分 概念 評価指標 ビジュアルブロック JavaScript Python
制御 順次実行 プログラムは上から順番に実行されることを理解している スタートをクリックしたとき
制御 条件分岐(if文) if文を使用して条件によって動作を変えることができる もし〇〇なら if () {
}
if :
制御 条件分岐(if~else文) if~else文を使用して条件に合っている場合と合っていない場合で動作を分けることができる もし〇〇なら~でなければ if () {
} else {
}
if :
else:
制御 条件分岐(if~else if文) if~else if文を使用して複数の条件によって動作を変えることができる "もし〇〇なら,
もし〇〇なら~でなければ"
if () {
} else if () {
}
if :
elif :
制御 データ出力 値を出力することができる 〇〇という console.log print
数的処理 正負の数 正負の数を扱うことができる [-10]歩動かす
数的処理 数字の大小 数字の大小で動作が変わることを理解している 大きさを[20]にする,
大きさを[100]にする
演算子 四則演算 四則演算を行うことができる 〇 + 〇
〇 - 〇
〇 × 〇
〇 / 〇
+, -, *, / +, -, *, /
演算子 等号 値や文字が「等しいとき」という条件を作成することができる 〇=〇 == ==
演算子 不等号 値が「~より大きい(小さい)とき」という条件を作成することができる "〇<〇
〇>〇"
<, > <, >
変数 変数の宣言 変数を宣言することができる 変数を作る let
変数 変数代入 変数に値を代入することができる 変数を〇にする = =

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

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

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

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

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

レベル

レベル

CFRP プロ検レベル
段階 レベル プロ検テキスト
言語版
(JavaScript/Python)
プロ検ビジュアル
言語版
実用性の高い
プログラムを
作成可能
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