---
# System prepended metadata

title: 卒論実験

---

対象：[OpenJDK](https://github.com/docker-library/openjdk/tree/4310f07d73b56b8fe43afac20ce9bc42ee03f11f)
# 実験1結果
## グループ１
- 鬼塚
    - 5段階評価
        - １
    - 感想
        - エントリーポイントであるgenerate.shがmyriadは簡潔かつ何をしているのかがわかりやすかった。一方templateでは、あらかじめプロジェクトの概要を知らないと何をしたいのかがわかりにくかった。
        - また、その他のファイルについても、myriadではプログラミング言語と書き方が似ていて概要をつかみやすかったが、templateの方は見慣れない書き方であり読む気が失せる内容だった。
- 田畑
    - ５段階評価
        - 2
    - 感想
        - .shファイル：for文内部が簡潔で，全体として何を出力するか明確
        - main.my：impot文により，imagesディレクトリの参照が必要なことが真っ先にわかる
        - importにより必要な情報を下の階層のディレクトリにまとめられる
        - template の場合に比べて明らかにファイル数が多い
        - 見るファイル数がtemplateと大差なければ1にしていた
- 岸本
    - 5段階評価
        - １
    - 感想
        - Myriadは関数によって処理に名前がつくため，何を行うための処理であるのかわかりやすかったから．呼び出しのためのシェルスクリプトもMyriadの方が単純で分かりやすかったため．
- 川渕
    - 5段階評価
        - １
    - 感想
        - myriadの方が格段に読みやすかった。
        - 関数にまとめられていて読みやすかった
        - ファイルが分けられていたので各ファイルの行数が短くて読みやすかった
        - 普段利用する言語に近いように感じた(import、関数の形など)ので理解しやすかった
        - 各ファイルが長くて役割を理解しにくかった
        - 中括弧が多くてごちゃごちゃした印象を受けた
        - {{}}、{{-}}の違い、defの仕様など、ぱっと見では動きがわからなかった
- 豊永
    - ５段階評価
        - １
    - 感想
        - Myriadの方がどこでどのような関数が宣言されていて実行されているかがわかりやすかったため。また、既存のプログラミング言語と似ている点も多かったため。
        - Templateは宣言されたものがどこで使用されているのかがわかりずらく、また機能ごとスクリプトがにまとまっておらず可読性が低かった。
        - Myriadはインデントが関数の挿入によって一貫しないところがありそこは少し戸惑った。
## グループ２
- 橋本
    - ５段階評価
        - １
    - 感想
        - Myriadのgenerate.shは簡潔な2重ループで、「複数のバージョン、ベースイメージごとにコンパイルを実行」という説明通りの処理をしてることが、コードから読み取れた。残りのファイルは内容はわからなかったが、いい感じに構造化されてそうな雰囲気は感じた。
        - Templeteの方は本当に何もわからなかった。
- 水上
    - ５段階評価
        - ２
    - 感想
        - Templateは、変数定義がどこにあるのかがわかりにくかったが、Myriadでは関数の頭で宣言が行われているため、見つけやすいと感じた。
        - Myriadの変数定義について、グローバル変数として定義されるため、呼び出し先の関数のコードでは、呼び出し元で定義されているべき変数がわかりにくいと感じた。
        - Myriadでは、ベースイメージごとにライブラリファイルを分けられているため、1ファイルごとの分量が少なく、探したい記述を見つけやすいと感じた。
        - Templateでは、if文などの記述が{{}}で括られており、ツールへの指令とDockerfile記述の区別が付きやすいと感じた。一方、ファイルが長くなると、{{}}が多くなり、逆に見づらくなるようにも思える。
        - 書く際の利便性として、Myriadはベースイメージの数が増えると、ファイルやライブラリの依存関係が複雑になり、バグの修正が難しくなりやすいのではないかと感じた。
        - 実験1の感想にも書いた、グローバル変数故に関数間での変数追跡が難しいという点は、規模が大きくなるほどに発生しやすくなりそうで、Myriadの強みを消してしまわないかと少し心配である。
        - 関数化により、コードクローンの解消などはしやすいと思うので、利用目的や規模次第であるとは思う。
- 藤原
    - ５段階評価
        - １
    - 感想
        - Myriadは関数名で大体何しているかが分かり易く，dockerに慣れてない人には非常に読みやすいと感じた．templateはシンプルに理解が難しかった．読んで理解するにはある程度dockerに関する知識が必要だなと感じた．
- 小林
    - ５段階評価
        - １
    - 感想
        - templeteの方は，作成するimageごとにDockerFileのテンプレートが用意され，出力されるDockerFileに記述されるコマンドは変数部分が多く，初見では，どの変数にどこで与えた内容が代入されDockerFileに記述されるのか理解が難しかった
        - 対して，myriadの方は，テンプレートごとにファイルが用意されており，main関数を実行する際に与えるbaseとversionごとに実行される処理がわかりやすく，出力されるDockerFileの内容が予想しやすかった．
        - そのため，テンプレートを利用し，自身の必要な環境に応じたDockerFileを作成することも実現しやすいように感じた．

### Myriad
- Good
    - 関数
        - 5人
    - 自分が知っている言語と似ていた
        - ２人
    - ファイル
        - 4人
- Bad
    - 見るファイル数が多い
    - インデントが統一されていない

### Template
- Good
    - {{}}が他のDockerfileと区別しやすい
- Bad
    - 見慣れない
        - 2
        - 中括弧など
        - 変数定義
    - ファイルが長い
    - 機能毎にまとまっていない


## 被験者特性
### 言語別
#### C言語
- 1年以上2年未満
    - 1人
- 2年以上3年未満
    - 6人
- 3年以上4年未満
    - 2人
#### Java
- 1年以上2年未満
    - 1人
- 2年以上3年未満
    - 7人
#### Python
- 半年以上1年未満
    - 1人
- 1年以上2年未満
    - 4人
- 2年以上3年未満
    - 2人
#### TypeScript
- 半年未満
    - 1人
- 半年以上1年未満
    - 3人
- 1年以上2年未満
    - 1人
#### JavaScript
- 半年未満
    - 1人
- 半年以上1年未満
    - 3人
#### Kotlin
- 半年以上1年未満
    - 3人
#### PHP
- 半年以上1年未満
    - 2人
- 1年以上2年未満
    - 1人
#### R言語
- 半年以上1年未満
    - 3人
#### C#
- 半年以上1年未満
    - 1人
- 3年以上4年未満
    - 2人
#### Ruby
- 半年未満
    - 1人
- 2年以上3年未満
    - 1人
#### Rust
- 半年以上1年未満
    - 1人
#### VHDL
- 2年以上3年未満
    - 1人
#### Visual Basic
- 2年以上3年未満
    - 1人
#### CASLⅡ
- 半年以上1年未満
    - 1人
#### VBA
- 半年以上1年未満
    - 1人
#### SML
- 半年未満
    - 1人

### アンケート回答
C:2年
Python:1年
HTML/CSS:3年
TypeScript:1.5年
React:1.5年
Java:2年
JavaScript:0.5年
Ruby:2年
Kotlin:0.5年

C：2年
Java：2.5年
TypeScript：0.5年

C言語：3年
C#：3年
R言語：6か月
Python：6か月
PHP：6か月
Ruby：3か月
JavaScript：3か月

Python: 2.5年
C: 2年
C++: 2年
Java: 2年
Rust: 6ヶ月
PHP: 6ヶ月
HTML/CSS: 6ヶ月
TypeScript: 6ヶ月

C: 3年
C#: 0.5年
Python: 1年
Java: 2年
Kotlin: 0.5年
R: 0.5年

C: 2年
Java2.5年
JavaScript: 0.5年
HTML/CSS: 0.5年
Python: 1年
TypeScript: 3か月

C言語: 2年半
Java: 2年
TypeScript: 半年

Python：2年半
C言語：2年
Java：2年
VHDL：2年
Visual Basic：2年
CASLⅡ：0.5年
VBA：0.5年
SML：1月くらい

C#：3年
C：1年
Java：1年
PHP：1年
Python：1年
Kotlin：0.5年
R：0.5年
JavaScript：0.5年