LoginSignup
1
1

More than 1 year has passed since last update.

コルーチンとチャネル入門#1 導入

Last updated at Posted at 2022-05-27

※ソース記事はこちら
このハンズオンチュートリアルでは、コルーチンの概要に慣れ親しむ予定である。コルーチンにより、非同期でノンブロッキングなふるまいのあらゆるメリットが、可読性を損なわずに提供される。コルーチンを使って、下層にあるスレッドをブロッキングせず、コールバックを使わずにネットワーク要求を実行する方法を見ていく。
次のことを学習する。

  • ネットワーク要求を実行するために、suspend関数を使う理由と方法
  • コルーチンを使って、並列に要求を送る方法
  • チャネルを使って、異なるコルーチンの間で情報を共有する方法

コルーチンが他の既存のソリューションとどのように異なるのか、についても議論していく。
基本的なKotlinの文法について精通していることが要求されるが、コルーチンの事前知識は必要ではない。
ネットワーク要求のため、コルーチンをサポートする、Retrofitライブラリを使用するが、このチュートリアルのアプローチは普遍的であり、異なるライブラリでも同様に効果がある。
このチュートリアルは、KotlniConfでのRoman ElizarovによるKotlin非同期プログラミングのワークショップをもとにしている。

セットアップ

IntelliJ IDEAが必要である。最新の無料のcommunityバージョンをここからダウンロードできる。
Kotlinプラグインのバージョン1.4がインストールされていることを確認してください。Kotlinプラグインを更新するには、ツール-Kotlin-Kotlinプラグインのアップデートを構成を使うこと。

プロジェクトのダウンロード

スプラッシュ画面上で、VCSから取得を選択するか、ファイル-新規-バージョン管理からプロジェクト...を選択し、プロジェクトパス http://github.com/kotlin-hands-on/intro-coroutines を指定することにより、IntelliJからリポジトリをクローンする。
...あるいは、コマンドラインからクローンする。
$ git clone http://github.com/kotlin-hands-on/intro-coroutines
プロジェクトにはsolutionブランチが含まれており、自分の解答と模範解答を比較するために、ブランチと比較...を使うことができる。

GitHubデベロッパートークンの生成

GitHub APIを使うため、自分のGitHubアカウント名と、パスワードかトークンのどちらかを指定する必要がある。GitHub上で、二要素認証を有効にしている場合は、トークンのみ動くだろう。
こちらで、自分のアカウントから、GitHub APIを使うためのトークンを生成することができる。
https://github.com/settings/tokens/new トークンの名前をたとえば、coroutines-hands-onと指定すること。
01.png
スコープを選択する必要はなく、画面の底にある"Generate token"をクリックすること。生成されたトークンをどこかにコピーすること。それはすぐに使う。

コードの実行

src/contributors/main.ktファイルを開き、main関数を実行する。その後、下にあるようなウィンドウが表示されるはずである(ただしデータはロードされていない)。

※筆者の環境ではJVMの例外で起動しないことがあったが、その場合、VM引数に-Dfile.encoding=ISO-8859-1を指定することで起動することができた。

フォントが小さすぎる場合は、main関数内で異なるデフォルトサイズを指定する。02.png
このプログラムは、与えられたオーガニゼーション配下のすべてのリポジトリのコントリビューターをロードする。デフォルトでは、オーガニゼーションは"kotlin"だが、ほかのものも可能である。後で、コントリビューターの数により、ユーザーをソートするロジックを追加しよう。
それでは、対応する項目に、GitHubユーザー名とトークン(あるいはパスワード)を埋める。VariantドロップダウンメニューではBLOCKINGが選択されていることを確認し、"Load contributers"ボタンをクリックする。UIはしばらくの間フリーズして、その後コントリビューターの一覧を表示するはずである。プログラムの出力を開き、データがロードされていることを確認できる。つまりそれぞれのリクエストが成功した後で、情報はログされている。継続する前にロードされたデータは見ることができる。
このロジックを実行する様々な方法を比較し、コルーチンが物事を変える方法を見ていく。コルーチンを使い始める前に、ほかのどのようなソリューションが可能かを見てみよう。まず、ブロッキングな方法でロジックを実装する方法を見ていく。つまり、読みやすくそのために、UIをフリーズさせるためよくない。その後、修正するために、コールバックを使い、これらのソリューションとコルーチンを使った場合とを比較する。最後に異なるコルーチンの間で情報を共有するためにChannelを使う方法を見ていく。
それでは始めよう!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1