uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

terraformプロバイダーとモジュールのバージョン制約に関するベストプラクティス

バージョン制約に関するベストプラクティス

Version Constraints - Configuration Language - Terraform by HashiCorp

terraformプロバイダーとモジュールのバージョン制約に関するベストプラクティスがここに記載があるのを知らなかったのでメモ代わりに意訳しておく。

まず、モジュールに関するバージョン制約について。

  • 3rdパーティーのモジュールについて、基本的にはバージョンは固定しておく。 必要なときにバージョンを上げるのが良い。
  • 自分たちのチーム・組織で管理しているモジュールについて、セマンティックバージョニングを採用しているかまたは不必要なアップデートを避けることが出来るリリースプロセスを採用しているならば特定の範囲でバージョンを指定するのが好ましい。

次に、プロバイダーのバージョン制約について。

  • 再利用するモジュールについてはそのモジュールが必要とする最小のterraformとプロバイダーのバージョンを指定する。 この制約は既知の非互換性を避けながら、モジュールのユーザーにモジュールを変更することなく新しいバージョンのterraformにアップグレードを許可する柔軟性を与える。
  • ルートモジュール(?)は依存するプロバイダーそれぞれにおいてプロバイダーのバージョンの上限と下限を指定するために~>を使うべきである。

~>の使い方は最初はなれないと難しいので詳しくは下記のドキュメントを読んで欲しいがドキュメントに挙げられている例を紹介すると ~> 1.0.41.0.5 から 1.0.99までは自動的にアップグレードするが 1.1.0 のようなマイナーバージョンが変わるバージョンアップはされないというような使い方が出来る。

Version Constraints - Configuration Language - Terraform by HashiCorp

まとめ

terraformを1年以上運用してきてこのバージョン管理のベストプラクティスを知らなかった結果、 最近非互換性のある3rdパーティーのモジュールのアップグレードにいくつか遭遇してモジュールのバージョンを固定する事になったので同じような事象に遭遇する前に動いているうちにバージョンを固定するのをオススメします。

Links

Visual studio codeでコンテナ内のhadolintを使うためのTips

What is hadolint?

hadolint は Dockerfileのlinterです。
Dockerfile内でベストプラクティスに沿っていない書き方を見つけて警告を出してくれます。

hadolint for Visual studio code

hadolint - Visual Studio Marketplace

Dockerfileを編集・保存していちいちlinterにかけるのも面倒くさいので他のlinter同様にVS codeの拡張が存在します。
しかし、そこのREADME.mdにはhadolintをhomebrew経由でインストールしたものを利用する方法しか紹介されていません。
自分はdocker container内のhadolintを使いたかったので今回その方法について調べたのでTipsとして残しておきます。

How to use hadolint installed in a container

Add support for running hadolint from docker image · Issue #37 · ExiaSR/vscode-hadolint

幸いなことに、過去にissueが立っていて同じくコンテナの中のhadolintを使う方法について紹介してくれている人がいました。

利用の手順としては次のとおりです。

  1. PATHが通っている適当なディレクトリに下のようなshell scriptを作成します。
    最新のhadolintではエラーや警告に自動的に色付けがされましたが、エディタ内の警告メッセージでは色付けのためのコードがそのまま文字として出力されてしまうため見づらくなってしまいます。 そのため、--no-colorを指定して色付けを無効化します。

     #!/bin/bash
    
     docker run --rm -i hadolint/hadolint:latest hadolint - --no-color < "$@"
    
  2. 上で作ったコマンドをVS codeのhadolintの設定項目から指定する。

拡張が機能すると下のように警告があれば下線が引かれてエラーのレベルと内容が出るようになります。

f:id:uokada:20210313145315p:plain
Visual studio codeの編集画面

たった2つの手順で簡単にVS codeでhadolintを使うことが出来るようになりました。
以上、簡単なtipsでしたが日々のDockerfile編集が楽になれば幸いです。

Enjoy your docker life!

hive-exec.jarを利用する際のTips

仕事で作っていたアプリケーションでhive-execを利用する機会があり、その過程で色々とハマったので解決方法を残しておきます。

java.lang.NoSuchMethodErrorへの対応

アプリケーションを開発し無事にアプリを立ち上げたが実行中にjava.lang.NoSuchMethodErrorを吐いて処理が失敗しました。

java.lang.NoSuchMethodError: 
  'void com.google.common.base.Preconditions.checkArgument(boolean, java.lang.String, java.lang.Object)'

このとき利用していたのがhive-exec-2.3.2-jarで何故このエラーが出るのかを調べていきます。

まず、jarファイルをダウンロードして中を調べてみるとjarファイルにGoogle guava関連のクラスが含まれていることが分かります。

$ jar tvf hive-exec-2.3.2.jar|grep Preconditions
  2059 Thu Nov 09 14:29:18 JST 2017 org/apache/parquet/Preconditions.class
  5310 Thu Nov 09 14:29:18 JST 2017 com/google/common/base/Preconditions.class
  2704 Thu Nov 09 14:29:20 JST 2017 com/google/common/math/MathPreconditions.class

$ jar tvf hive-exec-2.3.2.jar |grep "guava"   
     0 Thu Nov 09 14:29:18 JST 2017 META-INF/maven/com.google.guava/
     0 Thu Nov 09 14:29:18 JST 2017 META-INF/maven/com.google.guava/guava/
   131 Thu Nov 09 14:29:18 JST 2017 META-INF/maven/com.google.guava/guava/pom.properties
  5376 Thu Nov 09 14:29:18 JST 2017 META-INF/maven/com.google.guava/guava/pom.xml

今回のエラーは十中八九これが原因と思われました。なので、guava関連のファイルを取り除いたhive-exec.jarを利用すれば問題が解決するように思いました。

幸いなことに、hive-execライブラリは通常のjarファイル以外にもcore.jarというのが提供されています。

このcore.jarファイルは依存ライブラリのクラスが全く入っておらずorg.apache.hive関連のファイルしか含まれていないjarファイルです。
念の為、このjarファイルをダウンロードして中身を確認してみるとguava関連のクラスが入ってないことが分かります。

$ jar tvf hive-exec-2.3.2-core.jar |grep Preconditions
<no output>

このjarを使えば最初の例外を発生させずにアプリケーションを実行することが出来そうです。

余談: core.jarはいつから提供されているのか? & Why is the core.jar provided?

ここは完全に余談ですがcore.jarはいつから提供されているのかと何故提供されるようになったのかについて見ておきます。

ここ から過去のバージョンをいくつかみていつから提供されているのか調べます。

調べていくとv0.14.0からcore.jarが提供されていました。

次は、この時期のissueを読んで提供された理由を調べていきます。ググったらすぐ該当するissueが見つかりました。

How to use the core.jar in maven, gradle and sbt

さて、core.jarが提供されていることが分かりましたがどうすればこのjarを利用することが出来るのか紹介します。

maven, gradle, sbtの3つでどういう方法でcore.jarを利用するか紹介します。

どれもclassifierタグかキーワードを入れるだけで簡単に利用することが出来ます。

Maven

<dependencies>
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>2.3.2</version>
      <classifier>core</classifier>
    </dependency>
</dependencies>

Gradle

    compile("org.apache.hive:hive-exec:2.3.2:core")  
or
  compile(group:'org.apache.hive', name: 'hive-exec', version: '2.3.2', classifier: 'core')

sbt

libraryDependencies += "org.apache.hive" % "hive-exec" % "2.3.2" classifier "core"

or

"org.apache.hive" % "hive-exec" % "2.3.2" classifier "core"

まとめ

自分のケースではcore.jarを利用してアプリケーションを再コンパイル・パッケージングして動かして確認したところ例外が発生しなくなり期待通り動作するようになりました。

今回は hive-execを利用する際に起きたトラブルとその解決方法について紹介しました。
自分はこれまでclassifierされたjarを利用することがなかったのでcore.jarが提供されている可能性やそのjarファイルの利用方法を調べるのに時間を取られ問題を解決するまでかなりの時間を要しました。
今後同じようなケースがあった場合にサクッとclassifierされたjarファイルが存在する可能性を調べてデバッグを高速に完了出来るのではないかと思います。 また、このエントリーが他のhive-execを利用するユーザーの助けになればと思います。

PS3のストレージをHDDからSSDに換装した

昨年、コロナ禍の自粛中にPS3を引っ張り出してきて久しぶりにPS3をプレイしました。

やりはじめの方は別に不満はなかったんだけど段々とローディング時間が気になってきてこれはHDDの読み出しがボトルネックになってるな〜と思ったので、 SSDに変えてみた。

今更、PS3をプレイしているのもそうなんだがSSDに変えた話をしても別に誰も興味なさそうだが自分のためにメモしておこうと思います。

うちのPS3のHDDが250GBだったのでとりあえず、250GB付近のSSDを買ってきた。 シリコンパワーの240GBのものが安かったのでこれにしてみた。

ホントは書き込み耐性などを考えると1つ上のものが良いのかもしれないが今回は手軽に手に入ったこれにしました。


具体的なSSDへの換装の手順はPS3の機種によって変わってくるのだがCECH-4200系はここの解説が詳しいです。 HDDとマウンターを固定するネジが想定以上に固くドライバーだけでは回すことが出来なかったので自分はペンチを使ってネジを挟んで回す必要がありました。 あと、ドライバーは比較的小さめのもので十分でPCをいじるひとなら小さめのは持ってると思うので多分それでフィットすると思います。

システムソフトウェアをダウンロードしてくる必要があるんだがダウンロードのリンクがhttpで右クリックで保存的なことをしないとダメになっている。 これSONY側で修正して欲しいな。


あとハマったところとしてはUSBメモリを使うところでUSBメモリのファイルフォーマットをFAT32にする必要があるところ。
ディスク変換後にシステムソフトウェアをアップデートする必要がありその際にUSBメモリからSONYのサイトからダウンロードしたデータを読み取る必要がありそこで詰まった。 フォーマットが違ったとしても特にフォーマットが原因で読み取れない旨のエラーメッセージが出ないので1時間ぐらいここでハマっていた。

jp.easeus.com

そんなこんなで物理的、ソフトウェア的に1時間ぐらいハマったことはあったが全体で3時間ぐらいで換装作業は完了出来た。

実際にSSDに換装して期待通りの効果が得られたかどうかというと、まだ効果を見極められていない。 換装作業完了直後から仕事が忙しくてPS3を起動できていないので効果を実感するにはまだまだ時間がかかりそうです。

docker-toolboxからdocker Desktopに移行した ~ Migrate to docker Desktop from docker-toolbox ~

docker-toolboxからdockerに移行したのが簡単だったのでメモ書き。

なぜdocker-toolboxから移行するのか。

docs.docker.com

一番大きな理由としては、docker-toolboxが Legacy desktop solutionとして扱われていてdocker Desktopへの移行を勧められているからです。 もう1つ個人的な理由としては、dockerコンテナを使ったarmアーキテクチャ向けのバイナリのビルドができない。 最近、ARMアーキテクチャのものをビルドする機会があって会社PCではビルド出来ていたものが個人PCで出来なくて原因を探していたときにdocker Desktopとdocker-toolboxの違いに気づきました。

docker-toolboxだとARMアーキテクチャ向けのコンテナビルド時にエラーとなりビルドに必ず失敗していました。 もしかするとdocker-toolboxでもビルドする方法があるのかもしれませんがそこまで詳しく調べてません。

移行の手順

移行後は移行前のイメージにアクセス出来なくなるので後で再度 docker pullすることを考えてイメージの一覧を取得しておきます。

$ docker images

docker-toolboxのアンインストール

自分はbrew cask経由でインストールしていたのでbrew zapでアンインストールしていきます。

~ ❯❯❯ brew cask zap docker-toolbox
==> Implied "brew cask uninstall docker-toolbox"
==> Uninstalling packages:
io.boot2dockeriso.pkg.boot2dockeriso
io.docker.pkg.docker
io.docker.pkg.dockercompose
io.docker.pkg.dockermachine
io.docker.pkg.dockerquickstartterminalapp
io.docker.pkg.kitematicapp
==> Dispatching zap stanza
==> Trashing files:
~/.docker
==> Removing all staged versions of Cask 'docker-toolbox'

特にエラーや警告が出ることもなく完了します。

docker Desktopのインストール

こちらもbrew経由でインストールします。

~ ❯❯❯ brew cask install docker
Updating Homebrew...
==> Downloading https://desktop.docker.com/mac/stable/45519/Docker.dmg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'docker'.
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺  docker was successfully installed!

~ ❯❯❯ brew cask info docker
docker: 2.3.0.3,45519 (auto_updates)
https://www.docker.com/community-edition
/usr/local/Caskroom/docker/2.3.0.3,45519 (120B)
From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/docker.rb
==> Names
Docker Desktop
Docker Community Edition
Docker CE
==> Artifacts
Docker.app (App)
==> Analytics
install: 15,516 (30 days), 50,104 (90 days), 231,551 (365 days)

以上で移行は終了です。あとはdocker-toolboxが依存していたvirtualboxが残りますが他のアプリケーションで使っていなければそちらも消してしまいましょう。

brew 経由でインストールしていれば1時間もあれば移行が完了出来ますのでまだdocker-toolboxを使っている人は早めに移行を済ませましょう。

リモートワーク環境を整えている

弊社も日本のオフィスは1月の末日頃からリモートワークが推奨されているのでここ2ヶ月ほど会社に出勤していない。

弊社は以前からリモートワークすることが出来たが会社に行けばランチも提供されるしフリードリンク・フリービールがあるのでよっぽどのことがない限りWFHせずに会社で仕事をしていた。 そのため、家の開発環境があまり充実しておらずWFH推奨になったころの最初の1ヶ月近くはあまり仕事が捗らなかった。

4月でリモートワークから2ヶ月ほど経過して開発環境が整ってきたので棚卸しがてらに何を買ったかを書き下ろしておく。

まず、家にモニターがなかったのでサブモニターとしてこれを購入 。 会社のデスクには当然のごとくサブディスプレイがあったのでウインドウを切り替えながらの開発はやっぱり生産性が落ちていると感じていた。

自分の要件としてはサウンドが出ることと価格重視だったのでこれにしてみたがやっぱり角度の調整機能は入れておいたほうが良かったかなと少しだけ後悔している。 それ以外はディスプレイの輝度の調整などに使うボタンのレスポンスが良いのでさすがASUSというところ。 他のメーカーだとボタンが硬すぎて調整しづらいなど合わないこともあるので家電量販店で触る機会があるなら触ってから購入したほうが良いと思う。

2つ目がHHKB。セール期間中だったのもあってこれを機会に購入した。(TYPEはHHKB Professional HYBRID Type-SのUS配列)

www.amazon.co.jp

happyhackingkb.com

こちらはまだ使い始めて1週間も経ってないので後日改めて使用感を書き残したいと思う。

あと、HHKBを買う際にパームレストの購入がおすすめされたのでこれもポチった。

レビューを見ていると匂いがきついとのレビューがいくつかあったのでそれを心配していたがほとんど匂いがなかったので改善されたのかなと思っている。

リモートワーク環境を整えるために自分が買ったものをまとめてみたがモニターは生産性にかなり影響があるのでMUSTでの購入をおすすめしたい。 もう1つのHHKBは買った理由がセールだったのも大きいしまだ使いこなせていないところがあるから生産性に貢献しているかはまだなんとも言えない。(特に、Intetelli Jやいくつかのアプリでキーバインドがうまく動かない) 手に馴染んできてかつうまくハマるキーバインドを見つけられれば生産性に大きく貢献してくれるかなという感想。

リスアニ!LIVE TAIWAN 2019参戦時の覚書 - 台湾遠征のためにやったことのメモ

LISANI TAIWAN遠征のための台湾旅行の覚書

www.lisani.jp
魚拓: https://megalodon.jp/2019-1201-0931-14/https://www.lisani.jp:443/live-taiwan-jp/ticket.php

参考ブログ

アイマス台湾に行こうか悩んでいるPへ送る、リスアニ台湾行ってきたときの話 - なゆめも

アイマスのライブで台湾に行かれていた方が同様にエントリーを上げていて参考になったので自分の経験もメモがてらに残しておきます。

気になったところをいくつかピックアップして書いていきます。

LIVEチケット購入

リスアニ台湾の公式ページにある程度まとまっています。

今回のチケット販売はKKTIXというところが管理していて日本とは違って自分で席を選べるのは凄いいい体験でした。 チケットの発券は現地について後ファミリーマートのファミポートから発券する必要があります。 ファミポートでレシートを出力してレジに持っていっての発券時のフローは日本と同じです。(発券手数料も取られましたw)

ググれば端末の操作マニュアルのPDFが見つかるんですが古くて現在とは画面構成が変わっていて少しだけ戸惑いました。 今の方が操作が簡単になっていてトップ画面にKKTIXという文字が大きく表示されているのでそこから辿ればすぐに発券出来ます。

現地SIMの購入

もしSIMフリーの携帯電話を利用しているなら現地SIMを利用するのをオススメします。 事前にAmazonで台湾のSIMを買っておいて現地に到着したと同時にSIMを交換する運用をすると良いです。

Amazon.co.jp: [Mewfi] 台湾 4G-LTE データ通信 使い放題 プリペイドSIMカード (3日間): 家電・カメラ

Amazon | SIMカード & MicroSD ホルダー 2 リリースピン AFUNTA 2パック カード収納ケース マイクロ ナノ Micro-SD メモリー カード ケース 2つ SIM用交換ピン | SIM関連アクセサリ 通販

SIMフリー端末でなければポケットWi-Fi一択になるかと思いますが最近はSIMフリー端末も増えてきたのでどちらも選択出来る人が多いかと思います。 自分はポケットWi-Fi自身の電池切れが気になったので現地SIMの購入という方を選びました。

台湾はコンセントが日本と同じ方式なので充電スポットさえ見つかればバッテリー周りでは困ることがないと聞いていましたがそう簡単にコンセントが見つかるのか分からなかったので安心感を取ってSIMでした。

ガイドブックとかYoutubeでの情報収集

ハレ旅 台北 (改訂版) | 朝日新聞出版 |本 | 通販 | Amazon

一つは持ち歩きやすい紙のガイドブックが欲しかったのでこれを買いました。 自分としては必要な情報がしっかりとまとまっていたのでこれで十分でした。

最近は台湾在住の人がYoutubeで現地の情報を発信してくれているのでガイドブックに載っていないマイナーな情報を集めるならYoutubeチャンネルを眺めてみるのもオススメ。 台湾の地下鉄であるMRTの乗り方や空港から台北までの交通手段を比較した動画などはガイドブックや文字で見るのに比べると断然分かりやすいです。

  1. www.youtube.com
  2. www.youtube.com

お金周り

実は台湾ではLINE Payが使えます。モバイル決済でNo1のシェアを獲得するほど普及しています。 (ただし、台湾での利用にはクレジットカード連携が必須なので事前に設定しておきましょう) https://twitter.com/linepay_jp/status/1198815760425947136

タクシーも場合によってはLINE Payで支払いが出来るのでそんなに現金を使わずに済ませられます。 (ただし、コンビニは使えないことが多い)

自分が訪れた夜市の中ではこの2つの中の夜市の半数以上の店でLINEペイを使えました。

あとは旅立つ前にクレジットカードカードのキャッシング枠を有効にしておけば良かったなという印象です。 旅行最終日に少し現金が心もとない気分になって現地のATMにいったら手持ちのカードでキャッシング出来るカードがなくて現金が補充できなかったのでこれは念の為確認しておいたほうが良いです。

海外旅行保険

【公式】海外旅行保険・留学保険《t@bihoたびほ》

自分は万が一のことを考えて千数百円で安心を買っておきました。 幸い特に何もありませんでしたし台湾は安全な国ですのでなくても可だと思います。

ホテル

これは好みの問題な気もしますが自分はエクスペディア (Expedia)で探しました。

久しぶりの海外旅行だったので結構いいホテルを選びました。 タイペイ フラートン ホテル メゾン ノース(台北市)– 2019年 最新料金

しかし、一泊7000円も出せば十分に満足出来るところなので予算次第でランクを上下させれば良いところですね。

航空券/Airline

海外旅行初心者なので安心のANAを選びました。 台北に行くなら行き先の空港は桃園空港でも松山空港でもどちらを選んでも問題ないです。この2つの空港は日本でいうところの成田空港と羽田空港のような関係性です。自分は松山空港のほうが台北中心部から近いしそっちを選びましたが次回行く機会があれば桃園空港を使ってみたいなという気持ちですし行きと帰りで空港を使い分けても良かったかなと。

www.travel.co.jp

あまり飛行機に乗らないのでこれが普通なのか分かりませんが行きのフライトも帰りのフライトも1時間程度遅れるというトラブルにあいました。なので、ぎりぎりのスケジュールを組むと乗り継ぎのバスに間に合わないなどが発生するのでフライト前後は余裕を持ったスケジュールをもつ必要があります。

オンラインで入国審査の書類が書けるのでフライト前に済ませておくと当日が楽になります。

taiwanwind.jp

リスアニ台湾 2019の感想

2日目の日曜日1日のみの参戦でした。推しの井口裕香ちゃんがトリ、大トリを初めて務めた記念すべきライブに参戦出来て大満足でした。日本のリスアニLIVEと同様に各アーティストのパフォーマンス後にMC2人が出てきてトークしてまた次のアーティストという感じの構成です。MCは日本語で話して最後にシュアンが現地の言葉に翻訳するという形で進行しました。

日本でリスアニLIVEに参戦したことがそれと同じと思ってくれれば大丈夫です。

まとめ

まだまだ色々あった気がするので思い出したら追記したいなと思います。