Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(lib): Remove environment variable dependencies from lib.List() #118

Merged
merged 3 commits into from
Nov 2, 2023

Conversation

MH4GF
Copy link
Contributor

@MH4GF MH4GF commented Oct 30, 2023

ライブラリとしてのユースケースをサポートするために、各メソッドから環境変数やgit configへの依存を取り除いていきます。
今回は本丸の lib.List() の対応となります。Listをstructに変更しフィールドを外部から注入可能にしました。

動作確認方法

以下の内容を確認しています。

  • make test-all , make lint が通ること
  • make dist を実施し、 ./pkg/darwin_arm64/github-nippou が問題なく動作すること

@MH4GF MH4GF changed the title refactor list 2 refactor(lib): Remove environment variable dependencies from lib.List() Oct 30, 2023
os.Exit(1)
}

fmt.Println(lines)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

linesのstdout出力は元々 lib.List() 内で行われていましたが、ライブラリとして利用する際はstdoutではなくstringを受け取って操作したいです。
そのため呼び出し側でstdout出力するようリファクタリングしました。

accessToken: accessToken,
settingsGistID: settingsGistID,
}, nil
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

既存のCLIとしてのユースケースをサポートする NewListFromCLI() を用意しました。 今までと同様に環境変数やgit configから認証情報等を取得しListを返します。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど。素朴に cmd/root.go にベタ書きすることを考えてましたが、ビジネスロジック(大げさ)は lib/ にあったほうが良さそうですね。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getAccessToken()などはプライベートメソッドだったので、パッケージ外に公開するのはな......と考えこの形にしました 😄
ただ、逆にCLIからしか使われないロジックはcmdパッケージに寄せるのもありかも?とも思ったり 🤔 もしくはcli的なパッケージを切るのもありかもです(やりすぎかもですが)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あ、そうか。異なるパッケージからは呼べませんでしたね 😅

話逸れますが、C 言語の static 関数はそのファイル内からしか呼べなかったので、ファイル単位でパッケージ化できて、個人的には好きでした。

Go だとディレクトリを分けないといけないのがなあ...。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

おおー、そうなんですね、よさそうですね!RubyやJSだと逆に一度公開しちゃうとどこからでも呼べちゃうのがな...と思ってました 😅

Comment on lines -27 to +56
log.Fatal(err)
return "", err
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

log.Fatal() は 内部的に os.Exit(1) してしまうため、ライブラリとしてのユースケースでは困ってしまいます。
そのため単純にerrを返すよう修正しました。

@MH4GF MH4GF marked this pull request as ready for review October 30, 2023 00:27
if err = settings.Init(getGistID(), accessToken); err != nil {
return err
if err = settings.Init(l.settingsGistID, l.accessToken); err != nil {
return "", err
}
format := NewFormat(ctx, client, settings, debug)

parallelNum, err := getParallelNum()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NOTE: 将来的にはここや、タイムゾーンなども外部から注入できるようにしたいですが、必要に応じてPRを出すつもりです。

@masutaka masutaka self-requested a review October 30, 2023 13:31
lib/list.go Outdated Show resolved Hide resolved
Copy link
Owner

@masutaka masutaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Owner

@masutaka masutaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます!

@masutaka masutaka merged commit 8ab32ef into masutaka:master Nov 2, 2023
2 checks passed
@MH4GF MH4GF deleted the refactor-list-2 branch November 2, 2023 13:48
@masutaka
Copy link
Owner

masutaka commented Nov 2, 2023

🚀 v4.2.7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Proposal: ライブラリとしてのユースケースをサポート
2 participants