heihei blog

Blog icon by Unsplash https://unsplash.com/@virussinside

2020年11月を振り返る

もう師走ですね。あっという間だ〜〜。 では2020年11月を振り返ります。

沖縄行った

11月半ばの土日に行ってきました。

第一牧志公設市場で飲んだ🍻と雲丹 f:id:shoheikawano:20201206122351p:plain

f:id:shoheikawano:20201206122357p:plain

地元の人達みなさん優しくて、控えめに言って最高だった。

福岡に来てくれた人たちと遊んだ

沢山の人が来てくれた!現同僚、元同僚! ご飯食べに行ったりとか家でわいわいしたりとか。 控えめに言って最高だった。

その他

  • 休みでちょっとずつ作っている個人アプリは進捗よろしくない。悲しい。今年中には出したい。
  • 梨泰院クラス見終わった。(ちょっと遅れてる?w)面白かった。今度はスタートアップを見る。
  • あとはブリ🐟を食べた。

仕事では、小さいところだとあんまり触ったことなかったGitHub Actions使ってごにょごにょGitHub Packages作って配布するとかの設定したりとか、 企画進める動きやってみたりとか、少しずつチャレンジしたりした月でした。 まだ途中のものが多いので、今年でガッヽ(# ゚Д゚)ノ┌┛∑(ノ´д`)ノと終わらせたい。

以上です。 11月もお疲れさまでした!

maven-publish plugin + GitHub Actions + GitHub Packagesでライブラリモジュールを公開する

最近タイトルのようなことを行ったので、備忘録としてメモ程度にまとめます。自分は今回このように設定してみたよーという紹介になりますので、他にも方法は色々あるかと思います。 あくまで一例として参考程度に見ていただければと思います。

今回行いたかったことは以下です:

  • いくつかの.ktファイルを含んだlibraryモジュール(Androidモジュールではない)をpublishする
  • GitHub Packagesを利用するためのgithub username, tokenはGitHub Actions経由で渡す
  • ライブラリのバージョンはtagの名前に合わせる

maven-publishのセットアップ

まずはpublishするための設定を行います。 今回はmaven-publish pluginを利用しました。このプラグイン以外にも、サードパーティ製のプラグインがあるようです。

Maven Publish Plugin

publishしたいlibraryモジュールのbuild.gradleに以下を記述します(今回はGroovyで記述しましたが、きっと.ktsでも似たような記述になると思います)

// library/build.gradle

plugins {
    id 'kotlin'
    id 'maven-publish'
}

また、maven-publishのセットアップも同様のbuild.gradle内に記述します。

// library/build.gradle

// GitHub Actions経由で動的に値をセットします(動的に値をセットする必要がない場合には直接gradle内に記述します)
def releaseVersion = System.getenv("RELEASE_VERSION")
def credentialUserName = System.getenv("GITHUB_PACKAGE_USER_NAME")
def credentialPassword = System.getenv("GITHUB_PACKAGE_TOKEN")

publishing {
    publications {
        maven(MavenPublication) {
            groupId "YOUR_GROUP_ID"
            artifactId "YOUR_ARTIFACT_ID"
            version releaseVersion
            from components.java
        }
    }
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/YOUR_ORG_NAME/YOUR_REPOSITORY_NAME")
            credentials {
                username = credentialUserName
                password = credentialPassword
            }
        }
    }
}

余談ですが、これらの設定は、別ファイルに切り出しておくことも可能です。 たとえば、publish.gradleという名前の別のgradleファイルに設定を記述し、apply を用いてbuild.gradleに適用することができます。

// library/build.gradle

plugins {
    id 'kotlin'
    id 'maven-publish'
}

apply from: "./publish.gradle" // build.gradleと同階層のpublish.gradleを読み込みたい場合

maven-publishプラグインのセットアップを行いGradle Syncが正しく完了すると、publish というGradleコマンドが利用できるようになります。 最終的には、このコマンドを使ってmavenにライブラリを公開します。

maven-publishのセットアップTips or 注意点

Androidモジュールをpublishする

自分は試せていませんが、aarをpublishする場合にはいくつか追加でセットアップが必要かもしれません。

Android LibraryをGitHub ActionsでビルドしGitHub Packagesで公開する - Qiita

GitHubユーザーの権限

GitHub Packagesに公開するための設定で、usernameを指定する箇所がありますが、指定したユーザーがRepositoryへのアクセス権限(もしかしたら不要かも?)と、GitHub PackagesへのWrite権限を持っていることを確認してください。(権限が付与されていない場合にどのようなエラーになるかは失念してしまいました、すみません、、)

// library/build.gradle
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/YOUR_ORG_NAME/YOUR_REPOSITORY_NAME")
            credentials {
                username = YOUR_USER_NAME // 指定したユーザーがリポジトリへのアクセス権限があることを確認してください
                password = YOUR_PASSWORD
            }
        }
    }

GitHub Actionsのセットアップ

次にGitHub Actionsの設定です。 以下のYAMLでは、ざっくりこのような処理を順番に行っています

  1. mainブランチにpush
  2. tagのバージョンアップ
  3. バージョンアップされたtagの値をreleaseバージョンとして、publish

それぞれのstepの中で利用しているActionの詳細について気になる方は、Action名で検索するとドキュメントが出てくると思いますので調べてみてください。

name: Publish library module
on:
  push:
    branches:
      - main
jobs:
  publish-library:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout library repository
        uses: actions/checkout@v2
      - name: Bump up tag version # tagのバージョンアップ
        id: bump_tag_version
        uses: anothrNick/github-tag-action@1.26.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          RELEASE_BRANCHES: main
      - name: Prepare for gradle command execution
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Execute gradle command to publish
        env: # libraryモジュールのgradleファイル内で利用する環境変数の値を設定
          RELEASE_VERSION: ${{ steps.bump_tag_version.outputs.new_tag }}
          GITHUB_PACKAGE_USER_NAME: YOUR_USER_NAME
          GITHUB_PACKAGE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        uses: eskatos/gradle-command-action@v1
        with:
          arguments: library:assemble library:publish # maven-publishのコマンドを実行

(もしかしたら最後の assemble のコマンドは不要かもしれません)

GitHub Actions全般については、公式ドキュメントやチュートリアルが充実していますのでこちらを参照するのが良いと思います: GitHub Actions Documentation - GitHub Docs

正しくGitHub PackagesにPublishされると、リポジトリの画面で公開されたPackageを確認できます。

f:id:shoheikawano:20201206203017p:plain

f:id:shoheikawano:20201206203032p:plain

GitHub ActionsのセットアップTips

workflow_dispatch

GitHub Actionsでは、基本的にpushなどのgitのイベントに応じて処理が実行されます。ただ、workflow_dipsatch というイベントをworkflow YAMLに定義しておくことで、手動で特定のworkflowを実行することができるようになります。デバッグなどで処理を実行したい場合には便利です。

リポジトリ>Actionsタブ>All Workflowsの下の個別のWorkflow詳細ページから実行できます。わかりにくい場合はスクリーンショットを参考にしてみてください。

f:id:shoheikawano:20201206203045p:plain

Events that trigger workflows - GitHub Docs

Library Module読み込みのセットアップ

次に、公開されたPackageを利用するための設定です。この記事ではAndroidアプリで利用する前提で説明をします。

プロジェクトルートのbuild.gradleに以下を追加します:

allprojects {
  repositories {
    ...
    maven {
        name = "GitHubPackages"
        url = uri("https://maven.pkg.github.com/YOUR_ORG_NAME/YOUR_REPOSITORY_NAME")
        credentials {
          username = YOUR_USER_NAME
          password = YOUR_PASSWORD
        }
    }
...

以上までの設定が正しく完了すると、ライブラリを利用する準備が整ったことになります。

例えばライブラリが以下の情報で公開されている場合は、

<groupId>jp.co.hogehoge.fugafuga</groupId>
<artifactId>library</artifactId>
<version>0.1.0</version>

以下のように指定することで利用することが可能になるはず:

implementation "jp.co.hogehoge.fugafuga:library:0.1.0"

Library Module読み込みのセットアップ注意点

GitHubユーザーの権限

上でも記述しましたが、ここで username に指定したユーザーがRepositoryへのアクセス権限(もしかしたら不要かも?)と、GitHub PackagesへのWrite権限を持っていることを確認してください。自分はこれにハマりました。

ライブラリ利用の際のユーザー名とトークンのセットアップについて(追記)

GitHub Packagesで公開されているライブラリを利用する際、GitHubのトークンが必要となりますが、念の為バージョン管理せずに動的に値を設定する方針をとりました。

NAME=xxx
TOKEN=xxx

という文字列だけ保持するgithub-packages.propertiesというようなファイルを作成し、ローカルではgitignoreした状態でこちらを利用するようにしています。

CIの場合は、現状GitHub ActionsとBitrise両方を利用していますので、

  • GitHub Actions: Secretsにユーザー名とトークンの値をそれぞれ保存し、propertiesファイルに記述
  • Bitrise: 事前にこのpropertiesファイルをアップロードしておき、Bitriseのworkflow内でDLして利用

という形を現状はとっています。

まとめ

  • maven-publish plugin
  • GitHub Actions
  • GitHub Packages

でどのように自分がライブラリ公開を行ったかをざっと書きました。

GitHub Actionsを利用することで、たとえば

  1. ライブラリモジュールで依存しているライブラリのバージョンの自動更新をdependabotで行う
  2. tagを切ってGitHub Packages公開モジュールのバージョンを上げる
  3. ライブラリモジュールを利用しているリポジトリにバージョン更新PRを投げる

ということも自動で行えるように設定できると思います。(まだできていない)便利ですね。

以上です。間違っている点、不要な記述などあれば教えていただけたら嬉しいです🙏

参考にした記事やドキュメントなど

2020年10月を振り返る

最低気温が1桁の日もでてきて、だいぶ寒くなってきましたね・・!11月に入って少し経ちましたが10月をさらりと振り返ります。

と、その前に、先月のブログでこっそりほしい物リストを公開していたのですが、なんと気づいてリストから欲しい物を送ってくださった方々がいましたので、この場で感謝を。。本当にありがとうございます!全部大切に使わせていただきます!

それでは振り返ります。

もろもろ整った

上限なしのWi-Fiなど家の必需品が整っていなかったのですが、なんとか無事に整いました。引っ越してきて1ヶ月半くらいでしょうか?ようやく一通り落ち着いたという感じです!!わいわい

Pixel 5買った

もともと使っていたのはPixel 3 XLです。大きさは全然違います。いまのところ良いなと思っているのはカメラで0.6xできるところと、相変わらず夜景モードはよく使っていてきれいだなと思います。

その他

  • 映画「鬼滅の刃無限列車編」見た

炎を燃やせ!って気持ちになりました。映像すごいので、気になっている方はぜひ!はやくアニメも続きが見たい。

あとはお仏像様(寝姿の涅槃像(ねはんぞう))を見に行ったり、会社の後輩さんが遊びにきてくれたり、とかです。(雑)

f:id:shoheikawano:20201111094611p:plain

以上です。 10月もお疲れさまでした!

wire-gradle-pluginを動かす

wire-gradle-pluginを使う際にセットアップで躓いたのでメモです。

※2020.11.15追記※

wireのほうでドキュメントの更新がありました。 以下のPRの内容を参考にセットアップするのが良さそうです。

github.com

この記事では、このPRが出る前時点で私個人で検証したセットアップ方法について記述しています。

Wireとは

Protocol Buffersの.protoファイルからKotlinやJavaのコードを生成したりするためのライブラリです。ドキュメントに記載がありますが、AndroidやJava向けに開発されています。(2020.09にProto3を正式にサポートしています。)

※(こちらのプラグインは過去のもので、今はDeprecatedになっていますのでご注意を。)

wire-gradle-pluginとは

Wireライブラリにある子ライブラリのようなものです。Gradleプラグインとして利用できます。 github.com

ProtoファイルからKotlinやJavaのコードをコンパイルするためにWireライブラリの中にあるCompilerを使うだけであれば、Gradle Pluginでの設定が楽というような記述があります。今回はprotoからKotlinコードの生成がしたかっただけなので、この方法でセットアップを試みました。

が、うまくいきませんでした。

どうやらPlugin idが見つからないエラーが出ているようでした。

Plugin [id: 'com.squareup.wire', version: 'xxx'] was not found in any of the following sources:

原因

確実ではないですが、どうやらここらへんのようです:

解決策

上記のIssueにも記載されていますがsettings.gradle / settings.gradle.ktsあたりに設定を加えます

// https://github.com/square/wire/issues/1029#issuecomment-540152640
pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == 'com.squareup.wire') {
                useModule("com.squareup.wire:wire-gradle-plugin:${requested.version}")
            }
        }
    }
}

上記の設定を入れることで解決できました。 根本原因が解決されれば、この設定も不要になると思います。

2020年9月を振り返る

今が一番過ごしやすい季節ですね。暑くなく寒くもなく。 それでは9月をさらりと振り返ります。

ディズニーシー行った

f:id:shoheikawano:20200930234241p:plain

熱狂的なディズニーファンの後輩さんのオススメもあり行ってきました。

ソアリンめちゃくちゃ良かったですね。小雨も降りつつ、人はこの時期多すぎず大変楽しめました。また行きたい。

引越しした

f:id:shoheikawano:20200930234247p:plain

もともとコロナ渦中になるだいぶ前(2019年11月くらい)から、上長/人事の方々に相談をしたりしていて、 結婚関連の行事を当分延期すると決めてから、自分の実家に近い福岡に引っ越ししました。当初の予定より少しだけスケジュールが前のめりになったという感じです。

こっそりほしいものリスト

その他

  • 本「妻は他人 だから夫婦は面白い」を読んだ

www.amazon.co.jp

こういうふうに二人でやっているよーみたいな感じの話。「食う寝る二人住むふたり」と近い感じでスルスルと読めて面白かった。

  • 映画「スペシャルズ」見た

考えさせられる系。「最強のふたり」と同じ監督の映画です。自分は「最強のふたり」が好きだったので見に行ったって感じです。 「最強のふたり」が好きだったらこの映画も好きかも。

www.youtube.com

最強のふたりはこちら

www.youtube.com

現在のところAmazon Prime Videoで無料で観れるようです。

以上です。 9月もお疲れさまでした!

Kotlin 1.4からStdlibの依存の記述がいらなくなるらしいメモ

f:id:shoheikawano:20200930231113j:plain

Photo by Marc Reichelt on Unsplash

タイトルのとおりですが、Kotlin 1.4のバージョンから、Kotlin Gradle projectではStandard Library org.jetbrains.kotlin:kotlin-stdlib-* の依存の指定が要らなくなるようです。 これは、Kotlin 1.4の記事にも記載されています。

What's New in Kotlin 1.4 - Kotlin Programming Language

Dependency on the standard library added by default You no longer need to declare a dependency on the stdlib library in any Kotlin Gradle project, including a multiplatform one. The dependency is added by default.

The automatically added standard library will be the same version of the Kotlin Gradle plugin, since they have the same versioning.

以下のコミットをたまたま見つけて、調べてみたら、あらそう書いてある、という感じでした。

github.com

Android、KMPなどのKotlinを使ったプロジェクトを開発している方はgradleまわりの記述を少し減らせるかもしれませんね。 雑メモ以上です〜✍

2020年8月を振り返る

最近は曇ったり雨が降ったり。引き続き暑いけどちょっとずつ秋に近づいている感がありますね。 今年はあと30%ちょっと。

それでは8月をさらりと振り返ります。

DTM入門した

Youtube見始めるところから。

ずーっと昔から気になっていたDTM(Desktop Music)という分野ですが、お試し期間を使ってソフト触ってみたりしています。 見様見真似と雰囲気で触ってるレベルです。でも面白い。

f:id:shoheikawano:20200822192408p:plain

興味ある!という方はこちらのサイトがとにかく面白いし幅広いのでやってみてください。

learningmusic.ableton.com

宮崎駿のアトリエ「二馬力 」を拝みに行った

f:id:shoheikawano:20200816145802j:plain

東小金井駅から歩いて5-10分のところにあります。とてもとても暑い日に行ったのですが、アトリエ周辺は木々の葉っぱが覆い被さっているような感じになっていて、周辺だけは別空間かのように涼しかった。。蝉の声もすごかった。来れてよかった。

その他

オリジナルノート作成してきた

hinine(ハイナイン)ノートというお店にてオリジナルノートを作りました。

hininenote.jp

作りましたといっても、色とかデザインとか紙質とかを選んだらあとは作ってもらうだけ。 簡単。ワクワクな感じでした。写真では伝わらないけど、想像以上にかっこいいなって思いました。

f:id:shoheikawano:20200903225206j:plain

f:id:shoheikawano:20200903225209j:plain

アトリエはまたいつか見に行きたいなーって思いました。

以上です。 8月もお疲れさまでした。