Go Conference

Room B

Intermediate

20 mins.

Goはmoduleという単位で依存性を管理するシステムを公式に提供しています。そのシステムの中でも特に重要で特徴的なのが、依存モジュールのバージョンを決定する方法・アルゴリズムです。このアルゴリズムは、Minimal Version Selectionと呼ばれています。知っていても知らなくても、GoのほとんどのユーザーはこのMinimal Version Selectionを利用しています。あなたがgo getコマンドを実行するときには、Minimal Version Selectionが走っているのです。

しかし、Minimal Version Selectionについて良くわかっているGoユーザーはそれほど多くないのではないでしょうか。その理由としては「よく分かっていなくても開発ができるから」という理由ももちろんあるでしょう。しかしそれだけではなく、「手を動かして学ぶことが大変だから」という理由も大きいと思います。モジュールシステムを実際に手で動かして学ぶためには、自分が知りたい疑問に答えられるような複数のモジュールの複数のバージョンを作って公開し、それを使うメインモジュールを自分で作らなければいけないからです。

このセッションでは、それをオーディエンスに代わって実演します。それにより、このセッションを見終わった人は、次のような問いかけに対してすっきり答えられるようになるでしょう。

  • 私のモジュールには、requireしているバージョンより新しいバージョンが使われている依存モジュールがあります。これはなぜ起きるのでしょうか?
  • 同一のgo.modで時間をおいて2回go buildしたとき、依存モジュールのバージョンが変わることはありますか?
  • go.sumは「lockファイル」ですか?(ネタバレ: 違います)
  • go.sumがバージョンの決定と関係ないのなら、go.sumはなんのためにあるのですか?
  • 依存モジュールの公開されている全てのバージョンをexcludeしたらどうなるのですか?

[セッションの予定アウトライン]

  • 依存性管理とはどのような課題か
  • Goのmoduleとは何か
  • Minimal Version Selectionとは何か
  • go getしたときに何が起きるのか
  • Semantic VersioningとSemantic Import Versioning
  • Minimal Version Selectionは何が嬉しいのか
  • excludeとは何か
  • go.sumは何に使われるのか
  • 練習問題コーナー
Nobishii N/A

Nobishii N/A

Software engineer

Software engineer who wants to study programming, software engineering, computer science, math/physics.