2022年6月12日JavaScript

こんにちは、しきゆらです。
今回は、JS/TS環境でテストを書いて実行できる環境を作る手順をメモしておきます。

個人的に、JSの世界は定期的に天変地異が起こってこれまでデファクト的なツールが使われなくなるイメージがあり、あまり追えていないのが現状です。
そんな中、GASを書くことが増えた影響でJavaScript/TypeScriptを書くようになり、JS側の環境構築をちょこちょこやることが増えたのと、テストを書きたいと思って毎回同じことを調べている気がしたのでここに残しておこう、という魂胆です。

JavaScriptのテストフレームワーク

そもそも、JSのテストフレームワークにはどんなものがあるのか、というところからわからなかったのでちょっと調べてみました。
調べてみると、最近はJestというものが強いらしいです。

参考: https://2021.stateofjs.com/ja-JP/libraries/mobile-desktop/

なお、上記サイトではグラフィカルにJSの環境について知ることができるので、暇な時に見てみると面白いかもしれません。

Windows,フリーソフト

こんにちは、しきゆらです。
最近はコードを書く暇もなく、お仕事を進めているのでブログに書くネタがあまりなく更新できていませんでした。
働かずに生きていきたいと思う今日この頃。

さて、今回はWindows版Alfredぽいランチャー「ueli」を紹介します。
だいぶ前に、Win用軽量ランチャーとして「Keypirinha」を紹介しました。
この記事を書いたときは、ちょうどWindowsとMacを行き来するような形で使っていました。
Macでは標準的についているSpotlightや上位互換なAlfredを使い慣れると、同じようにWindowsでもキーボード操作だけでアプリ起動ができるとうれしいなぁと思いつつそれっぽいアプリを探して見つけたのが「Keypirinha」でした。
一時期はKeypirinhaを使っていましたが、インストール・初期設定が微妙に手間なのがネックでした。
そんな中、使い心地はほぼ変わらず、インストールや初期設定がとても手軽にできるランチャー「ueli」を見つけたので紹介します。

2021年10月11日Ruby

こんにちは、しきゆらです。
前回から2か月ほどたっていて驚いている今日この頃、いかがお過ごしでしょうか。

今回は、ちょっと前に書いた「【Ruby】YAMLに環境変数を埋め込む」で任意の文字列を環境変数に置換する方法をメモしましたが、そのちょっと発展した話です。
タイトル通り、YAMLにローカル変数を埋め込むにはどうすればよいかなぁ、と思って調べてみたら何とかなったのでちょっとメモしておきます。

2021年8月13日Electron,HTML/CSS,Windows,プログラミング

こんにちは、しきゆらです。
今回は、最近遊んでいるElectronで詰まったところをメモしておきます。

Electronとは、というところはググればいろいろ出てくるのであまり書きません。
個人的には、Webの技術でデスクトップアプリを作れる便利ツールという認識です。

さて、まずcontextBridgeとは何ぞや、というところですが、私もちゃんと触り始めたのは最近なので詳しくはないので書きません。
(というか、書けません)
詳しくは公式ドキュメントあたりを見てくださいな。
https://www.electronjs.org/docs/api/context-bridge
https://www.electronjs.org/docs/tutorial/context-isolation

個人的理解では、レンダラープロセスからNode関連を使うために、扱える範囲を絞るための機能というイメージです。

では、contextBridge経由でAPIを公開するところで詰まったところと、解決方法をメモしていきます。

なお、実行環境等は以下の通り。

  • OS: Ubuntu 21.10 on WSL2
  • electron: 13.1.7
  • webpack: 5.45.1

2021年7月19日Windows,環境構築

こんにちは、しきゆらです。
今回は、WSL2上で動いているUbuntu自体のアップデートをしようとして詰まったのでメモしておきます。

Ubuntuは半年に1回大きめのアップデートが入ります。
こいつをインストールするためのコマンドがdo-release-upgradeです。

このdo-release-upgradeさん、WSL環境で実行しようとすると、最初のパッケージのリストを取得した後に失敗します。
何度やっても落ちるので、もしやと思いsystemdのPIDを1にした状態で実行するとうまくいったのでその時のメモです。

2021年7月19日Windows,環境構築

追記: 2122/11/19
WSL自体がsystemdをサポートしたので記事を書きました。
こちらもご覧ください。


こんにちは、しきゆらです。
今回は、もう何回書くのか、という勢いで書いているWSL2上でsystemctlを使うための手順です。
またもやOS入れ直しで環境リセットしたので、再度入れようとしたところ以前の手順では不十分だったのでメモしなおしです。

とはいえ、使うものは天下のgenieです。
https://github.com/arkane-systems/genie

2021年7月5日JavaScript

こんにちは、しきゆらです。
最近はGASをよく書いています。

そんな中、GASを書いていて困るのは「コードにパスワードとかを直書きしたくない」ということ。
環境変数のようなものがあればいいのに・・・と思っていました。

探してみると、一応それっぽいものは用意されていました。
それが、PropertiesServiceというもの。
ドキュメント:https://developers.google.com/apps-script/reference/properties/properties

こいつを使えば、コードに書きたくない隠しておきたいものを置いておくことができます。

ということで、今回はPropertiesServiceの設定方法や使い方をメモしておきます。

2021年6月4日Windows,環境構築

こんにちは、しきゆらです。
今回はあまり需要がないであろう自作PCネタです。
そして、前回の記事が3月末ということに驚いてます。

半年ほど前、Radeon RX6800のリファレンスモデルを購入しました。
記事:【自作PC】Radeon RX6800を買ったので5700XTから差し替える

上記記事の時点では、もともと6800XTが狙いだったが購入できなかったので場つなぎ的な意図で6800を購入した状態でした。
その後、定期的にお店を回ったり通販をのぞいたりしてもほぼほぼ購入不可能な状態でした。
あるのはぼったくり価格で売っている怪しい業者か転売を生業としている方ばかり・・・。
そして仮想通貨の高騰によりマイニングする方が増えたり、半導体不足などの影響による価格高騰など様々な要因が重なり購入できず状態でした。

発売日に購入した6800が8.5万程度だったが、現在は16万以上という状況である昨今。
この値段を出すんであれば上位モデルが買えるのでは、と思いつつサイトを眺めていましたが最上位は値段もありある程度は変えそうな雰囲気でした。
そして、買おうと思っていたSapphireの6900XTに新しいモデルが出たので、これは買うしかない、となってポチってしまいました。

2021年3月31日Linux,環境構築

追記: 2022/11/20

WSL自体がsystemdをサポートしたとのことで記事を投稿しています。
こちらもご確認ください。

追記:2021/07/19

どんな勢いで更新されるんだ、という印象ですが
こちらの内容からインストール方法が変更されていたので再度まとめなおしました。
【WSL2】Ubuntu 20.04でPID1をsystemdにする 2021年7月版


こんにちは、しきゆらです。
今回は、またまたWSL2環境でsystemdをPID1で動かす手順をメモしておきます。

というのも、またまたPCパーツを買ったので組みなおしつつOSをクリーンインストールしました。
1年程度でOSをクリーンインストールするので、妙な不具合なんかは出ないのでとても良いのですが、
WSL2のインストールももう一度やることになります。
以前の記事「【WSL2】Ubuntu20.04でPID1をSystemdにする」を参考にしてみるとうまくいかない。
なんでや、と思ってもろもろ調べてみると結構手順が変わっていたので、調べながらインストールしました。
その手順をメモしておきます。

公式はこちらに移ったようです。
arkane-systems/genie: A quick way into a systemd “bottle" for WSL | https://github.com/arkane-systems/genie

READMEにはトップページを全部読んでね、と書いてあるので読んでおきましょう。
ではインストール。
なお、環境はUbuntu20.04です。

インストール手順

まずは、依存しているライブラリから。
Ubuntuなので、公式のDebianの手順を参考にしていきます。

dotnet-runtime-5.0を以下を参考にインストール。
https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install -y dotnet-runtime-5.0

続いて本命。
こちらも公式が別で手順を置いてくれていたのでそちらを参考に。
https://arkane-systems.github.io/wsl-transdebian/

sudo apt install apt-transport-https
sudo wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
sudo chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg

sudo emacs /etc/apt/sources.list.d/wsl-transdebian.list
// Ubuntu 20.04環境なので<distro>をfocalに置換
deb https://arkane-systems.github.io/wsl-transdebian/apt/ focal main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ focal main

これにて準備終わり。
本命をインストール。

sudo apt update 
sudo apt install systemd-genie

これにてインストール完了です。
あとはいつも通りgenie -sとかで動かせば終わり。

一応公式使い方を張っておきます。

# 以下からの引用です
# arkane-systems/genie: A quick way into a systemd "bottle" for WSL | https://github.com/arkane-systems/genie

genie:
  Handles transitions to the "bottle" namespace for systemd under WSL.

Usage:
  genie [options] [command]

Options:
  -v, --verbose <VERBOSE>    Display verbose progress messages
  --version                  Display version information

Commands:
  -i, --initialize           Initialize the bottle (if necessary) only.
  -s, --shell                Initialize the bottle (if necessary), and run a shell in it.
  -l, --login                Initialize the bottle (if necessary), and open a logon prompt in it.
  -c, --command <COMMAND>    Initialize the bottle (if necessary), and run the specified command in it.
  -u, --shutdown             Shut down systemd and exit the bottle.
  -r, --is-running           Check whether systemd is running in genie, or not.
  -b, --is-in-bottle         Check whether currently executing within the genie bottle, or not.

まとめ

だいぶ長いことこの辺を詰まったタイミングで追っていますが、今回はどうもちょっと面倒でした。
というのも、元のリポジトリが移動したことでどこにあるのかを見つけるのに時間がかかりましたね。
見つかってよかった。

そして、元のリポジトリのころは「429 Too Many Requests」のエラーで更新できない状況が続いていましたが、Githubに移行したようで問題なくインストールできました。
何度かアップデートをたたいても問題なさそう。
良き良き。
これで心置きなくLinuxっぽい世界で遊べますね。

今回は、ここまで。
おわり

2021年3月7日Ruby

こんにちは、しきゆらです。
毎年12~2月は気分が落ち気味で何も手がつかない時期なんですが、今年は何もできてませんでした。
気が付いたら、前回の更新が11月ということに驚いています。

さて、今回はタイトルの通りYAMLに環境変数を埋め込みたいなぁと思って何とかしたのでメモしておきます。
YAMLは設定ファイルなどでよく作りますが、Gitで管理したいが重要項目は共有したくないことはよくあるかと思います。
こんな時、YAMLファイルを知っていそうな人経由で回していく運用とかをしているところもあるかもしれませんが、ずっとうまく回るわけはありません。
ということで、YAMLに必要項目を記載しておき、チーム内だけで見れるところに必要な情報を置いておけばよいだろう、という考えです。

方針としては、ファイルにそれっぽいマーカーをつけて置き、ファイル読み込み時に環境変数と置換してYAMLオブジェクトを作る感じです。
例としてはこんな感じ。

# YAMLファイルを文字列として読み込み
yaml_str = File.read("path/to/yaml.yml")
# ${ENV_VARIABLE}形式で埋め込んだ環境変数を置換する
yaml_str.gsub!(/\${\w*}/) do |matched|
  ENV[matched.gsub(/\W*/, "")]
end
 
# YAML文字列をオブジェクトに変換
YAML.safe_load(yaml_str, symbolize_names: true)

実際に挙動を見てみます。
上記のスクリプトを適当なメソッドにして動かしてみます。

 irb(main):001:1* def test(yaml_str)
 irb(main):002:2*   yaml_str.gsub!(/\${\w*}/) do |matched|
 irb(main):003:2*    ENV[matched.gsub(/\W*/, "")]
 irb(main):004:1*  end
 irb(main):005:1*
 irb(main):006:1*  YAML.safe_load(yaml_str, symbolize_names: true)
 irb(main):007:0> end
 => :test
 irb(main):008:0> test("token: ${SERVICE_TOKEN}")
 => {:token=>nil}
 irb(main):009:0> ENV["SERVICE_TOKEN"]
 => nil
 irb(main):010:0> ENV["SERVICE_TOKEN"] = "hogehoge"
 => "hogehoge"
 irb(main):011:0> ENV["SERVICE_TOKEN"]
 => "hogehoge"
 irb(main):012:0> test("token: ${SERVICE_TOKEN}")
 => {:token=>"hogehoge"}

${SERVICE_TOKEN}という文字列を環境変数の置換して、hogehogeという値を埋め込むことができています。
マーカーは自分で定義しているので、正規表現が書ければ好きな形式で表現できます。
本来はerbとかを使って埋め込んだほうがいらないバグが起きないかと思いますが、中でやっていることはこんな感じなので知っておくと便利かと思います。

今回は、ここまで。
おわり