ExercismのABAPコース(ABAP on Exercism)を受講してみた

こんにちは。
今回はExercismというプログラミング言語学習サイトにてABAPコース（ABAP on Exercism）を受講しましたので、その内容について学習の流れを簡単に説明します。
現在ABAPを業務や趣味で書いている方、書いていなくても読む必要がある方におすすめできる内容だと思いますので、最後までお読みいただければ幸いです。

※演習を40完了させてわかったことやTipsを以下にまとめました。こちらもご覧ください

https://qiita.com/Go_Ohta/items/05b282f0c2d44e616b29

### サイトへのリンク
https://exercism.org/tracks/abap

### そもそもExercismとは？
無料で利用できる、プログラミング言語学習サイトです。ABAP以外にも61種のプログラミング言語学習ができると記載があり、プログラミング学習を誰にでも楽しく安全に学習してもらうことを目標としているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/2ec6c32c-99f2-7d2a-ac1b-10793621af5c.png)

https://exercism.org/about

### 利用するための準備
アカウント登録が必要となります。メールアドレスで登録し、そのアドレスに届いたメールにある承認用リンクを利用して承認を行います。一般的なウェブサイトの会員登録と同じなので手順は省略します。

### ABAP on Exercismでの学習内容について
ABAP on Exercismには2024年2月現在で42の演習が登録されています。最初のほうは「Hello,World!」といった定番や、ITAB…といった内部テーブル関連の内容であることがわかりますが、その後は、「どのようなことを学習できるのだろうか」と興味を引くようなテーマが多く登録されているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/c3fe27c6-5654-0ae7-4265-49b0289db99f.png)

### 学習の流れ
今回は、一番最初の「Hello,World!」にて説明を行います。タイトルとこの演習で何を行うのかと言う説明があります。スクリーンショット上では「iteration」というのがありますが、これはこの演習を完了させた場合に表示される内容で、最初は表示されていません。説明を読むと、
> "Hello,World!"という文字列を返すクラスを書いてください
> テストスイートを実行して成功することを確認してください
> 回答を提出して、サイトで確認してください

とあります。よくある、"Hello,World!"と画面に表示する、のではありません。そのため、「ハイハイ、Hello,World、Hello,World」と説明をよく読まずに進む私のような人は「え、何これ？」となりますので注意してください:grin:
説明をよく読んだら、画面右上の「Open in editor」ボタンをクリックして先に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/473d9a0f-50a9-b92c-5280-8ddc2ef1e294.png)

コードはExercism上（ブラウザ上）で記述できます。ローカルでも記述できるようですが今回は試していません。コード入力画面では、左側にすでにクラスとメソッドが作成されていて、回答のコードを記入する箇所に「ここにコードを記述する」コメントが記載されています。皆様の楽しみを奪わないため回答は隠してあります。画面右のInstructionsには前画面の説明が再度記載されているので、前画面で確認を怠った方も安心です:wink:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/7e05b5cf-c51d-5002-dfff-35160bf563bb.png)
画面右のTestsをクリックすると、左のクラスメソッドが適切に動作しているのかを確認するためのテストクラスとテストメソッドがすでに記述されています（こちらのコードは変更不要です）。動作確認はこのテストクラスを実行することで行われます。
今回の場合、クラス：CL_ABAP_UNIT_ASSERTのASSERT_EQUALSメソッドを使用して、クラス：ZCL_HELLO_WORLDのHELLOメソッド（つまり、左側のコード）から返された結果と、文字列"Hello,World!"の内容が同一であるかを確認するテストである、ということがわかってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/64817690-c721-b623-cf5d-57273e40a482.png)

https://help.sap.com/saphelp_SCM700_ehp02/helpdata/en/49/268dc67b6716b4e10000000a42189d/content.htm?no_cache=true

コードを変更すると、画面左側下部の「Run Tests」ボタンがクリックできるようになります。このボタンをクリックすると、テストコードが実行され、結果が画面右の「Results」に表示されます。今回はテストが1つのみですが、複数のテストがある場合は成功したテストと失敗したテストが返されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/f8bcaeb0-00d2-632a-3a44-2df5ed1ad204.png)
エラー発生の場合にもメッセージが返されます。しかし、ABAPのエラーのように丁寧な内容ではないので、ある程度の慣れが必要かと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/a7132109-ca5f-2d08-77ec-823cba9bb910.png)
全てのテストに成功すると、以下のような画面が表示されます。~~コードをさらに更新したい場合はそのままでよいですが、完了だと判断したら~~Submitボタンをクリックすると、自分の回答を提出することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/030a8bc9-c4bb-2a93-8f29-3acf69c157da.png)

### 他人の回答内容をチェックする
~~演習を完了させると~~、Submitボタンをクリックすると他の受講者の回答内容を確認することができるようになります。今回のような回答に差が出ない演習は別として、たとえば3つ目の「ITAB Aggregation」の回答内容を見てみると、受講者で何通りかの対応方法があることがわかります。ほかの方の記述方法や新しい機能（命令）の発見にもつながり、大変参考になります。ABAPヘルプで用法を確認する、自分のコードを更新する、他人のコードをさらに改良してみたりと、ここをきちんと見始めてしまうと大量に時間を消費する可能性があるので、注意してください:laughing:

### 演習の完了
この演習を完了させる場合は、Submit後の画面右側にある「Mark as complete」ボタンをクリックするとこの演習を完了することができます。完了にすると、自身のコードが「ほかの人の回答」として他人に見えるようになります。 ※以前、完了させると次の演習が受けられる、と記載しましたが、完了をしなくとも別の演習を同時に勧めることができるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/973149e6-d2cc-4f68-bec8-c7a0c57bc4af.png)

### まとめ
今回は、ExercismのABAPコースである、ABAP on Exercismについて説明をしました。私自身は仕事としてABAPコードを読み書きすることはしばらくなくなっており、Qiitaの記事や趣味でもABAPコードを書くことも減っています。久しぶりにABAPを学習する機会に触れて「今はこんな記述方法ができるのか、こんな機能（命令）が増えたのか」と非常に良い刺激を受けています。ABAPを現場で書いていて自信がある方にもお勧めできる内容だと思いますので、チャレンジしてみてはいかがでしょうか。
今回は以上となります。最後までお読みいただき、ありがとうございました。