Flutter + GitHub Actions で flutter analyze に失敗したときの対処法

エラー内容

GitHub Actions 上で flutter analyze コマンドを実行すると、以下のようなエラーが発生し、 action の実行に失敗してしまう(exit code 1)。

Analyzing xxxxx...                                          

  error • The named parameter 'visualDensity' isn't defined • lib/main.dart:14:9 • undefined_named_parameter
  error • Undefined name 'VisualDensity' • lib/main.dart:14:24 • undefined_identifier

ローカル環境では flutter analyze してもエラーは発生しない。

結論

subosito/flutter-action の channel を beta にしたら解決した。エラー発生時、ここは stable にしていました。

      - uses: subosito/flutter-action@v1
        with:
          channel: 'beta' # これが正解

2020/5/1 追記

少し原因など調べたので追記しておきます。

原因

ローカル環境と、 subosito/flutter-action の channel が一致していませんでした。(そりゃエラーにもなるよな、というところ……とほほ)

ローカル環境の flutter channel の確認は flutter channel コマンドでおこないます。

% flutter channel
Flutter channels:
* beta
  dev
  master
  stable

ちょっと記憶にないのですが、私は channel を beta に 設定していたようです。なので、GitHub Actions の設定も beta にしておかないとエラーとなってしまうのですね。

原因がわかったところで、正しい対処

私の場合、beta の機能をガンガン攻めて使っていきたいというわけでもないので、ローカル環境、GitHub Actions の設定ともに stable channel に合わせておくのが良さそうです。

ということで、ローカルと GitHub Actions の設定を stable channel を向ける作業をしていきます。

channel の切り替え

% flutter channel stable 

upgrade

% flutter upgrade

静的解析

% flutter analyze

先述の visualDensity の部分など、いくつかソースコード中でエラーが出たので、それを適切な形に編集しました。

subosito/flutter-action のバージョン設定の書き換え

      - uses: subosito/flutter-action@v1
        with:
          channel: 'stable' # ここを変更

これで、ローカル環境、GitHub Actions の設定ともに stable channel を向いた状態で正しく動くようになりました。お粗末さまでした。

参考

Flutter 現在のchannelの確認方法と切替え方法、おまけにupgradeの方法 | ふらっと考える

2019-2020 シーズン振り返り

先日の投稿の通り、最近すっかりスキーにハマっています。少雪の上コロナウイルスの影響もあり、もしかしたらもう今シーズンはスキーには行けないかな……と思うので、ここらでシーズンのまとめを書いておこうと思います。

2019-2020 シーズン

  • 12/28 ガーラ湯沢スキー場
    • 12/24くらいまでガーラがOPENしていなかったので心配したが、ちょうど行った日にたくさん雪が降ったのでよかった
  • 12/29-30 Hakuba 47
    • 例年に比べて雪があまりにも少なかったので驚いた
  • 1/24 丸沼高原スキー場
    • ゴンドラコースからのロングランが楽しかった
    • 晴れたり曇ったり雪が降ったりしたが、基本的に穏やかな気候のなか過ごせた
  • 1/30 かぐらスキー場
    • メインゲレンデより上は、それなりに快適に滑れた記憶
    • 下のほうは思い切り雨だった
  • 2/23 宝台樹スキー場
    • 混雑が激しかった上、強風で山頂リフトが止まったのでなにも楽しくなかった
    • アーバスで行ったら、渋滞が激しすぎて到着が遅れ、3時間くらいしか滑れなかった
  • 2/29-2/30 白馬五竜 & Hakuba 47
    • 中間部から上はほどよく雪が柔らかく滑りやすかった
    • いいもり方面は少雪で泥混じりの雪……
  • 3/14 かぐらスキー場
    • 鬼のように混んでいて驚いた(私も人のことは言えないが、自粛とはなんだったのか……)
    • メインゲレンデより上はすっかりアイスバーンになってしまい滑りにくかった
    • ロープウェイ登ってすぐのあたりが、雪がほどよく緩んでいてちょうど良かった
  • 3/20-21 Mt.乗鞍スノーリゾート(3/21はBCツアー参加)
    • こじんまりとしていて人も少なく、いい意味でかぐらとのギャップを感じた
    • 3/20 はハイシーズンかと思うくらい雪が降った
    • 3/21 は風はあるものの晴天で、初心者のBCにはよい日だった

滑走日数 11日


じつは昨シーズンも同じようにまとめを書こうとして、結局投稿しそびれていたので、ついでにこちらに書いておきます。

2018-2019 シーズン

  • 12/23〜24 斑尾高原スキー場
  • 12/29〜31 Hakuba 47
  • 1/13 岩原スキー場
  • 1/21 スノーパーク尾瀬戸倉
  • 2/9〜11 苗場スキー場、かぐら・みつまたスキー場
  • 2/16〜17 戸狩スキー場
  • 3/16 神立高原スキー場

滑走日数 13日

バックカントリー用の道具を揃えました

バックカントリー用の道具を揃えました

ここ5年ほど、スキーをしに毎シーズン群馬や新潟長野あたりのゲレンデに遊びに行っていたのですが、最近、山をスキーハイクアップしたり、手つかずの山を滑ったりしたりすることにも興味が出てきました。

そこでこの春、バックカントリー用の道具を揃えました!今回はその道具の紹介記事です。

ゲレンデスキーヤーバックカントリーを始めるにあたって買ったもの

私は結局、以下の用具をひと揃い購入しました。トータルで15万以上になりました。。

以下、それぞれの道具について細かく紹介していきます。


板 : ATOMIC - BENT CHETLER 100 (length 172cm)

センター幅がありパウダーに対応しやすく、また、軽いためこちらにしました。

あとは、訳あり品(ビンディング穴あけ後に購入キャンセルされてしまった品)が店頭に出ていてお買い得だったんですよね。穴を埋めたあとがあるのはちょっと残念ですが、デザインもかっこいいので気に入っています。

ビンディング : G3 - ION 12

ゲレンデ用のアルペンスキーを所持している人がバックカントリーを始める場合、たぶんビンディングの選択が一番難しいと思います。

ビンディングを選ぶとき、必ずと言っていいほど出て来るキーワードが「登り重視か、滑り重視か」というものです。だいたい、スキーでの山登りをしたことがない状態で、「登りか、滑りか」と言われても答えるのが難しいわけですが。。。

私の選んだテックビンディングと呼ばれるビンディングは、その点で言えば「登り重視」の作りで、

というような特徴です。

個人的な意見ですが、行動範囲を広げていい雪を楽しく滑るためには登りの体力がそれなりに必要になるので、払えるお金と胆力があるのなら、「登り重視」の装備を選ぶのは悪くない選択だと思っています。

でもまあ、結局は、詳しい人によく話を聞いて選ぶのが良いのかな、という感触です。私もいろいろと調べたものの、どうしたものかよくわからず、最後は店員さんに説明してもらってやっと決めることができました。

サイトだとこのあたりがわかりやすかったです。ビンディングの種類

ブーツ : TECHNICA - ZERO G TOUR PRO

3着ほど試着させてもらい、軽く、前側の可動域が広めで、歩きやすそうだったためこちらにしました。

ブーツに関しても「登り重視か、滑り重視か」が問われます。私はせっかく軽いビンディングを選んだのを無駄にしたくなかったので、ブーツもなるだけ軽め(ただし剛性もそれなりにあり、滑りの安定感も見込めそう)なもので選びました。

余談 : 重量について

ここまでさんざん「重さ」の話をしてきたので、具体的に、私がゲレンデで使っている道具と、バックカントリー用に揃えた道具にどれだけ重さの違いがあるか調べてみました。板は大きさがかなり違うのでひとまず除外して、ブーツとビンディングで比べてみます。

サイトでの公表値と自宅での実測値が入り混じっているのであくまで目安ですが、重量差は片足でおおよそ 1.7kg でした。こうして見ると、「登り重視」は「軽さ重視」とニアリーイコールなのかなという気がします。重い道具を使うほど、登りでの体力の消耗は激しくなるので。

ライミングスキン : Black Diamonds - Ascension Nylon STS

店員さんの「クライミングスキンを使うのは初めて?ならこれ。とにかく登りやすいから。」の言葉を信じてこれにしました。

出すときしまうときの扱いやすさを売りにしている商品もありますが、登りの時間は一日のうち3時間以上を占めるのに対して、シールの出し入れは一日数回なので、「登り」の性能ってとっても大事だと感じます。(ほかのシールを使ったことがないので、偉そうなことは言えないですが……!)

スキークランポン : G3 ION スキークランポン

スキークランポンビンディングとの相性があるので、ビンディングを決めると、必然的にクランポンをどれにするかが決まってくるのかなと思います。

初心者のうちは、クランポンが必要なほどきつい斜面に行くことはそれほどないと思うので、最初は買わないでいても問題ないかもしれません。購入したものの、私も最初のツアーではクランポンは使用しませんでした。


以上、私の道具の紹介でした! なにか買い足すようなことがあればまた書こうと思います。

Java のプログラミングでつまづいたこと(初学者のとき)

satoru-takeuchi.hatenablog.com mizchi.hatenablog.com

このあたりを読んで自分も書いてみようと思った、ので書きます。これらの記事がバズってからずいぶん経ってしまったけれど……。けっこうな文量になりそうだったので、まずは Java の初学者のときにつまづいたことを書こうと思います。

whoami

2014 年に大学を卒業し、そこからソフトウェア開発業に携わって 6年目になります。小中高とプログラミング経験はなく、大学は文系学部卒だったので、初めてプログラミングを本格的に学んだのは、新卒で入る会社の入社前研修のときです。

プログラミング学びはじめの頃は、Oracle を中心とした SQL・データベースの学習、 Java の学習。その後、OJT によるプロジェクト参画 (Spring Framework などを使用)をしていました。

初学者のころにつまづいたこと

とにかく用語がわからない

インスタンス」「プロセス」など、当時はどれもあまり聞いたことのない言葉。最初はまったくイメージが湧かず、調べてもなかなかしっくり来ませんでした。いまとなってはもうすっかりお馴染みなんですけどね。

なんとか検索して調べて、卑近な例でたとえを挙げてくれているようなサイトを見つけて、イメージを掴んでいきました。たとえば以下のようなサイトですね。

Oracle Database | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

いま見ると、正直「なんじゃこりゃ」という感じなのですが、右も左もわからない当時の自分は、ノートやペンのたとえに大変助けられました。

自分の学習していることが何に役立つかイメージできない

Java を学びたてのころ、簡単な条件分岐や標準入出力の仕方などを習って、コンソール上で動くプログラムを書いていたのですが、黒地の画面に白の文字で「Hello World」などと表示されることにどれだけの意味があり、この先の仕事の何に結びついて、どう役立つのか、がなかなかイメージできませんでした。

なんとなくですが、こういう思いをしている初学者の人って多いんじゃないでしょうか。

いま思えば、実際に現場で仕事をしている先輩に、「この勉強が現場でどう役立つんですか?」と質問してみたら良かったのかもしれません。もし、いまの私が当時の自分に教えるなら、「サーバやデータベースがどのように関わって、日頃自分たちの使っているサイトが表示されているか」というようなところを説明して、その中で Java (サーバ側プログラム) のやっていることを教えるかな、と思います。

「クラスの継承」や「インターフェースの実装」がまるきり理解できない

これは衝撃すぎて忘れもしないのですが、当時使っていた参考書には class Car class SuperCar extends Car という例が出ていました。正直、まったく意味がわかりません。「スーパーカー」が「車」を「継承」??? 「継承」というのはどういう意味だろうか。技術の継承、などならわかるけれど、「車の継承」とは。

どうにもわからないので、他の参考文献をあたってみると、今度は「いるかクラス」「いぬクラス」「哺乳類インターフェース」などと書いてある。「いるかといぬが哺乳類なのは知っているけれど、それのいったい何がプログラムに関係あるの???」という感じ。

いま思うと、処理に関係するようなたとえが出てこなかったせいで、理解がなかなか進まなかったのだと思います。ソフトウェア開発歴 6年になっても「哺乳類インターフェース」なんて作ったことないもん。

その後、研修の補講で「Java でポーカーのゲームを作る」という課題があり、先輩エンジニアが良いお手本のソースコードを見せてくれたおかげで、「なるほどこういう意義があるのか!」という気づきを得ました。

実際のところ題材は何でも良かったのですが、プログラミングにどう活きるか、を誰か早く教えてくれたら良かったのに、といまも思います。

どうやって克服したか

仲間の存在が大きかった

私の場合、会社の新人研修でプログラミングを学んでいたので、同じくらいの学習レベルから学習を進めた同期の存在 (だいたい 20人くらい居た) 、また、そんな私たちに親身になって教えてくれた研修講師や先輩の存在が、何より大きかったと思います。

「戻り値と引数ってどっちがどっち?」「オブジェクトとかマジで意味わかんねー」「研修ダルいわ〜」など (?!) 、わからないことを「わからない」と素直に言い、教えてもらえる環境があったことで、しっかりと地力を育むことができたと感じています。

会社以外でも、 Twitter のフォロワーの方にはかなりお世話になっていました。 Oracle Master Bronze 11g の勉強で苦しんでいたときには、 Platinium 資格持ちのフォロワーさんが教えてくれたこともありました (恐れ多い) 。私自身エンジニアとしての実力ははまだまだなのですが、いろいろな方に助けていただいてここまで来たのだな〜という感じがします。


そんなところです。なにか学びはじめの人の励みになればと思います。

また気が向いたら、最近学んでいる TypeScript 編を書きます(また学びはじめて数ヶ月ですが、これもなんだかんだで書くことがたくさんある)。

新しい Mac に入れたもの一覧 (2019 冬)

新しい Mac を手に入れたときにやったことをまとめました

dotfiles などで済む分については dotfiles に入れているのですが、それでも手作業でやることって意外とありますね。開発周りでやったことをまとめてみました。


zshbrewから入れてログインシェルに設定する

bashからzshに移行したときのメモ - Qiita

最近はなんとなく bash より zsh 派です。前職で暇なときにこっそり乗り換えた記憶があります。 .zshrc も dotfiles で管理しなきゃなーと思いながら、なんだかんだで半年くらい経っている気がしますね……。なんとかしなければ。

fzfを入れる(リポジトリをcloneしてinstall叩きました)

fzfを使おう - Qiita

fzf は Ctrl+R のヒストリー検索で使って以降離れられなくなりました。ヒストリー検索以外でも今後は使いこなしていきたいところです。

colorオンでlsした時にディレクトリが青なのが見にくいので、シアンに変更

ls の結果に色をつける - ねもぷらす

タイトルそのままです。これは本来 .zshrc に入れるべきところですね。

markdownをデフォルトでエキスパンドする

vimの折りたたみ設定

vimmarkdown を開いたときに、折りたたみが入ってしまうのが嫌だったので、デフォルトでエキスパンドする設定を入れました。これも本来 .vimrc に入れるべきところですね。


変更入るたびに dotifles コミットしてしてないのがいけないんですよね。とりあえず今回の分はちゃんとあとでコミットします。

はじめてのふるさと納税!

今日は技術的な内容ではありません!!! 今年、はじめてふるさと納税をおこなったので、そのレポートです。Wowma! ふるさと納税というサイトを使って3自治体に寄附をしました。

寄附した自治体と返礼品

北海道千歳市

返礼品

ルタオ3種のアソートセット

URL

https://furusato.wowma.jp/products/detail.php?product_id=25030

感想

3種合わせると結構なボリュームがあり、かなりお得感があります。ロイヤルクロワッサンリングは3月まで、他の2品は6月まで冷凍保存がきくので、日持ちも安心。

宮城県蔵王町

返礼品

特選厚切り8mm塩牛タン600g国産南蛮味噌100g付)

URL

https://furusato.wowma.jp/products/detail.php?product_id=11542

感想

厚切りの牛たんが200g×3パック届きます。フライパンで弱火でじっくり焼くと、お店で食べるようなブリンブリンの歯ごたえの牛たんが楽しめます。強めの塩味でビールに合う!

和歌山県湯浅町

返礼品

白浜富田の水使用の地ビール「ナギサビール」3種6本セット

URL

https://furusato.wowma.jp/products/detail.php?product_id=20686

感想

個性の違うビールが3種類。複数自治体への寄附を考えている酒飲み勢の方は、地ビール+おつまみの組み合わせで寄附先を考えてみるのも楽しいかもしれません。私はペールエールと牛たんで最高になってしまいました。

あと、冷蔵便で冷えたビールが届いたのがビックリでした。(てっきり通常の宅配便で届くものかと思っていた)

手続き周り

私は「ワンストップ特例制度」というものを利用し手続きを行いました。ふるさと納税に関わる制度がまだよくわからない、という方もまだ多いかと思いますが、思ったよりずーっと簡単だったので、気になる方は来年、ぜひチャレンジしてみてほしいです!

ワンストップ特例を利用した申請手順をかんたんにまとめると、以下の通りです。

1) ふるさと納税サイトで寄附先を選ぶ

文字通り「ふるさと」に寄附する、返礼品の割の良いところに寄付する、ふるさとではないが所縁のある土地に寄付する……など選び方はまちまちですね。

2) 寄附の申し込みフローの中で、「ワンストップ特例を利用する」というようなチェックボックスがあるので、そこにチェックを入れた上で、申し込みを完了させる

寄附の申し込み、というとなんだか難しそうですが、たいていの場合はショッピングサイトと変わらないUIとなっているので、普段ネットショッピングをする方であれば問題なく申し込み完了できると思います。

3) 寄附先の自治体からワンストップ特例申請書類が届くので、申請書類に必要事項の記入と本人確認書類のコピーをして自治体に返送する

氏名・住所のほか、マイナンバーの記入も必要となります。自治体によっては、申請書類とともに返送用の封筒を入れてくれるところもあります。

複数自治体に寄附する場合は、1~3の手順を、寄附先の自治体にたいしてそれぞれおこないます。(今回私は3自治体に寄附をしたので、3枚申請書の記入と返送をしました。) これらの申請をすることで、確定申告をおこなうことなく、翌年の住民税からの控除が受けられます。

注意点

年収や家族構成により控除可能な額が変わる

サイトで、控除上限額を知ることのできるページが用意されている場合があるので、そういったものを活用して控除上限額を計算しておくと良いです。Wowma! ふるさと納税だと以下のページにありました。

https://furusato.wowma.jp/guide/easy_step.php

ワンストップ特例制度の対象外となる条件がある

以下の場合が特例の対象外となっていました。該当される場合は注意が必要ですね。

  • 6自治体以上にたいして寄附をおこなう場合
  • 確定申告をおこなう場合

いかがだったでしょうか? めちゃくちゃWowma! ふるさと納税ダイレクトマーケティング記事になってしまったのですが……笑 気になった方はぜひ来年、ふるさと納税にチャレンジしてみてください!

RDS(Aurora)で文字コード設定をutf8mb4にする

RDS(Aurora)にあるデータベースの文字コードを、utf8からutf8mb4へ変更したので、そのときに学んだことや手順のメモです。以下の手順をおこないます。

  • RDSの設定をutf8mb4にする
  • クライアント側(今回はSpring Bootのアプリケーション)の設定を行う

RDSの設定

RDSのパラメータグループの設定を行います。以下の設定を、クラスターのパラメータグループにたいして入れればOK。

character_set_client:utf8mb4
character_set_connection:utf8mb4
character_set_database:utf8mb4
character_set_results:utf8mb4
character_set_server:utf8mb4

検索していると、indexを張ろうとしたときに問題があるからファイルフォーマットをBarracudaにする、など他の設定の情報も出てくるのですが、MySQL5.7.9以降では問題にならないようです(ファイルフォーマットがデフォルトでBarracudaになるため)。以下リンク先のページにわかりやすくまとまっています。

参考

パラメータグループの設定ができたら、クライアントから確認してみましょう。

mysql> show variables like "chara%";
+--------------------------+-------------------------------------------------+
| Variable_name            | Value                                           |
+--------------------------+-------------------------------------------------+
| character_set_client     | utf8                                            |
| character_set_connection | utf8                                            |
| character_set_database   | utf8mb4                                         |
| character_set_filesystem | binary                                          |
| character_set_results    | utf8                                            |
| character_set_server     | utf8mb4                                         |
| character_set_system     | utf8                                            |
| character_sets_dir       | /xxxxxxx/xxxxxxx/share/charsets/ |
+--------------------------+-------------------------------------------------+
8 rows in set (0.00 sec)

character_set_client, character_set_connection, character_set_results の値はクライアント側の設定によるので、一旦気にしなくて大丈夫です。また、character_set_system は、システムで使用する文字コードで変更はできないため、utf8のままで問題ありません。

クライアント(Spring Bootアプリケーション) の設定

Connector/Jの公式ドキュメントを見ながら進めていきます。

雑な翻訳ですが、以下のような感じでしょうか……。


  1. サーバー設定を character_set_server=utf8mb4 にする
  2. characterEncoding と connectionCollation を接続文字列から除外する

これらの手順を行うことで、Connector/JがUTF-8の設定を自動検出して使用できる


また、Connector/J のバージョンによっても挙動が異なる部分があるようなので、念のためドキュメントの続きの部分も確認しておきましょう。


Connector/J 5.1.46 以前のバージョンを使用している場合

utf8mb4を使うには、サーバーは必ず character_set_server=utf8mb4; で設定されていなければいけない その設定がされていなく、characterEncodingUTF-8 が指定された場合、MySQLの接続には utf8 が設定される(utf8mb3エイリアス)

Connector/J 5.1.47 以降のバージョンを使用している場合

characterEncodingUTF-8 が指定された場合、utf8mb4 を意味する


characterEncodingに同じ値が設定されていても、バージョンにより解釈が異なるのですね。

私が使用していたConnector/Jはバージョン5.1.47以降だったので、設定としては、以下のように入れておけば大丈夫そうでした。

spring.datasource.url=jdbc:mysql://xxxxxx.xxxxxx.ap-northeast-1.rds.amazonaws.com:3306/db_name?characterEncoding=utf8

今回のブログは以上です!細かいところで地味にハマったのでどなたかのお役に立てば幸いです!

参考