Go言語製Let's Encryptクライアントlegoをライブラリとして使う

こんにちは。 ピリカ開発部の伊藤です。

ピリカではほとんどのサービスでGCPAWSが発行するHTTPS証明書を使っていますが、見える化ページと呼ばれる、自治体や企業など、一定の範囲内でのごみ拾い活動を集約しているサービスで使っているワイルドカード証明書はLet's Encryptで発行しています。

Let's Encryptで証明書発行するためのクライアントとしては標準のcertbotの他にもいろいろなものがあります。 個人的に、legoを気に入って使っています。お気に入りポイントはこんな感じです。

  • Go言語で作られていて、Pythonの言語環境に依存せずに使える
  • いろいろなDNSサービスに対応している
  • コマンドラインcertbotよりもわかりやすい

コマンドとしてずっと使っていて、このコマンドを内部的に使用する形で証明書を自動更新をするCloud Runを作ろうとしていたのですが、改めてリファレンスを読んでいたところライブラリとしても運用できることがわかりました。

今回はlegoライブラリでLet's Encryptクライアントを書いてみたので、使い方を紹介します。

続きを読む

自分らしく、使ってて楽しいターミナルのカスタマイズ

こんにちは、ピリカの豊川です。 入社してそろそろ半年が経ちますので、以前から書こうと思ってたブログ記事を書いてみます。

f:id:minorin22:20220330153405p:plain

これは、Macのデフォルトのプロンプトでターミナル操作した時のスクショです。特に難しいことはしてませんが、なんとなく何をやってるのかわかりにくく思いませんか?

いくつか問題点を上げてみます。

  • 文字の色が一色で、直感的に読みづらい
  • 改行がなく、プロンプト、入力、出力がどこにあるか把握しづらい
  • カレンとディレクトリを知るのにいちいちpwdする必要がある

一方で、私の普段使ってるターミナルはこんな感じです。

f:id:minorin22:20220330154513p:plain

f:id:minorin22:20220330155338p:plain

  • 文字の色にルールがあり、色から直感的に意味が分かりやすい
  • プロンプト内に改行、出力後に1行の空行があり、入出力ともに読みやすい
  • カレントディレクトリはフルパスで常に表示(ただしホームは~で略記するなど、冗長的な表現は防いでいる)
  • 時刻表示により、いつどんなコマンドを打ったか一目瞭然
  • 前のコマンドがエラーを吐いた場合、プロンプト横の顔文字が変わる(実用性と癒しを兼ね備えてます)
  • lsの表示が色分けされていて分かりやすい(青:ディレクトリ、白:ファイル、赤:実行ファイル)
  • (git管理されている場合)ブランチ名が表示される。また、ブランチの状態によってブランチ名の色も変わる。

ちなみにRosetta2を使うときは、物理的に別アプリ(普段はiTerm2、Rosetta2は純正Terminal.app)と使い分け、さらには色も分けることでヒューマンエラーを防いでいます。

f:id:minorin22:20220330155651p:plain

まとめ

技術的に難しいことはしてませんし、ググったらやり方はすぐ出てくるような内容ですので、ここでは敢えて具体的な設定方法については解説しません。

フロントエンド開発にはユーザー視点でUXに向き合うことが欠かせませんが、まずは自分の身の回りで、自分自身がユーザーとして使うものを使いやすくカスタマイズすることは、意識付けの良いきっかけになると思っています。

皆さんもこだわりポイントや自慢したいところがありましたら、ぜひお聞かせいただけると嬉しいです。

gspread(およびgspread_dataframe)の利用方法について

pythonからスプレッドシートを触るとき、gspread/gspread_dataframeなどのライブラリを利用することができます。

これらライブラリについて内部実装を見ながら、どのような使い方をするかまとめました。

続きを読む

iPadOSの審査ではEthernet接続が使われている

こんにちは、ピリカの伊藤です。

先日、iOSアプリを審査に出したところ「iPadOSで起動時に通信エラーで進めない」とリジェクトされました。 これまでこのようなリジェクトを受けたことはなく、特にサーバーも問題なく動作していました。

では、なぜ審査落ちになったのでしょう。審査落ちのメッセージに添付されていたスクリーンショットを確認したところ、通信インジケーターが出ていませんでした。通常、ここにはWi-FiやCellularのアイコンが表示されているはずです。

f:id:iseebi:20220303194545p:plain

一応この点について指摘してみましたが「このデバイスは正しくインターネットに接続している。詳しくは教えられない。」という回答があったのみでした。

iPhone/iPadに有線LANをつなぐ

Wi-FiやCellularの表示がなくても接続できる状況ってあるか…?いや、そういえばEthernetがありました。

実はiOS 9.3以降で、Lightning to USB3 Camera Adapterを使い、そこにUSB-Ethernetアダプタを繋ぐことでEthernet、つまり有線LANに繋ぐことができるようになっています。もちろん、USB-Cポートを備えたiPad Proであれば、直接USB-CにUSB-CのEthernetアダプタをつなぐこともできます。

なぜEthernetで通信エラーになっていたのか

LightningポートにEthernetを挿せるように環境を整えました。Ethernetアダプタをポートに接続すると、設定アプリにEthernetの項目が増えます。

f:id:iseebi:20220303194749p:plain

この状態にすることで、問題を再現できました。

このアプリは通信前にFBNetworkReachabilityライブラリでインターネットの疎通をチェックしていますが、このライブラリはCellular接続でない場合はIPアドレスを検出する動作をしていましたが、これがEthernetの環境ではうまく動作していませんでした。

GitHubの最新のコードではこの問題は解消されていましたが、このバージョンはCocoaPodsにリリースされていません。

GitHubを直接参照する形で更新することもできましたが、ライブラリがObjective-Cで記述されていること、現在のアプリはiOS12以降対応になっている等を鑑みて、NWPathMonitorに置き換えて対応することにしました。

今後、通信の疎通にはEthernet接続もあるというのを考慮に入れるようにしたほうが良いと思いました。

Macでビデオ会議(画面共有)中に手元のiPhoneの画面を共有する方法

こんにちは、ピリカの冨田です。

今日は、Macの画面に、手元のiPhoneの画面をリアルタイムで表示する方法をご紹介します。

PCでビデオ会議中に、相手にiPhoneの画面共有をしたいことはありませんか?

例えば、アプリの操作方法を相手にリアルタイムでお伝えしたい時などです。

この方法を使えば、ビデオ会議などで、Macから自分の画面を共有している時に、手元のiPhoneの画面を共有することができます。

f:id:kahi0223:20220210182747p:plain
手元のiPhoneの画面をMacの画面に表示する

続きを読む