at backyard

Color my life with the chaos of trouble.

Warning: You're using a string directly inside <Link>. This usage has been deprecated. Please add an <a> tag as child of <Link> の対応法

何度も起きていることだが、下書きフォルダに入れっぱなし案件。
定期的に下書きフォルダ見ていくと、大抵公開忘れのポストがいくつか新たに塩漬けになっている気がする。。
ただ、これは書き捨てて的な文章なので、公開していなかっただけかもしれない。

以下、個人的な備忘録。


Next.jsを使ってアプリを書いていたときに、 Warning: You're using a string directly inside <Link>. This usage has been deprecated. Please add an <a> tag as child of <Link> というwarningが出た。
読んで字の如しな、warningなので、下記のような修正を施すと消える。

<Link href="/foo">
  {bar}
</Link>

<Link> のなかに <a>も挿入してやる必要がある。

<Link href="/foo">
  <a>{bar}</a>
</Link>

以上。

Next.jsアプリをNetlifyにデプロイしたとき、想定したURLでアクセスができなくて対応したときのメモ(動的パスでの扱い)

入力されたパスに応じて、クライアント側でデータを読み込むような処理が書かれたNext.jsアプリをNetlifyにデプロイした際、 実際の挙動が開発時(ローカル)と本番(Netlify)で異なっていたのを対応したので、備忘録として残しておく。

ここで扱っている内容自体は下記のポストを見て解決できた。
また、起きている問題がどういうものか?ということについても、下記のポストに書かれている内容と同じため、もし似たような問題で困っている方がいたら、下記を参照することをおすすめする。

qiita.com

以下、備忘録。


下記のようなURLでアクセスしたい。

http://example.com/123456

そのためNext.jsプロジェクトのファイル配置は下記のようになる。

Pages/[id].tsx

だが、本番上で上記URLにアクセスすると404になる。

下記ではアクセスできる。
([id]という文字列を入力する)

http://example.com/[id]

上記のようになる原因としては、deployコマンド後、下記の内容でアウトプットされているためかと思われる

out/[id].html

Netlifyの _redirects に下記の1行を加えてリリースすることで、意図したアクセスが可能となった。

/:id /[id] 200

Gatsbyで作ったサイトをGoogle Search Consoleに登録する方法(Google Analyticsのタグを用いて認証させる)

Gatsbyでサイトを作った際、Google Search Consoleに登録をしようとしたら、所有権を証明できませんでした というエラーが出てしまった。

f:id:shinshin86:20200903073721p:plain

Google Analytics自体は既に gatsby-plugin-google-analytics を用いて設定済みの状態。
Gatsbyを用いている場合、うまくいかないのか...?と思い、少し調べてみたら、下記のような記事を見つけた。

vincentdnl.com

どうやら、Google Search Consoleに登録させる場合はオプションを設定する必要があるようだ。

{
    resolve: `gatsby-plugin-google-analytics`,
    options: {
        trackingId: `<Google Analytics用のトラッキングID>`,
        head: true // ← これを追加する
    }
}

上の修正を加えて反映を行い、再度Google Search Consoleから登録を試してみると、今度は正常に登録できた。

CSSフレームワーク、BULMAのmodalサンプルコード

少し前にBULMAを触っていると、日記に書いた。

nikki.shinshin86.com

ちなみにこの日記に書いている8月引きこもり宣言については、問題なく達成できた。
まだセミは鳴いているので外に出ることはまだないが、蝉の声も小さくなってきたので、外に出れる日もそう遠くはないだろう。

さて、CSSフレームワークのBULMAだが、これがなかなか便利で、今でも機会を見てちょいちょい触っている。
ただ、ドキュメントがいささか簡素、というか、ドキュメントどおりに書いただけでは再現できない箇所がいくつかある。
Webの画面を作っている人なら特に問題ないレベルだが、まあ思考停止状態でコード書いているとき(コピペ脳状態)だと、サラッと実装したいときに一度立ち止まって実装について考える必要が出てくるのがすこし嫌だった。

数年前にcodepenにアカウントを作っていたと思い、ためしにBULMAのmodalのサンプルをこちらで書いてみた。

https://codepen.io/shinshin86/pen/gOrGwNmcodepen.io

あ、ちなみにBULMAを使う場合は、こちらのHTMLジェネレータを使うと、サクッと書き始められます(宣伝)。

html-generator.shinshin86.com

必要なメタデータを入力して、コード生成欄をクリックすればクリップボードにHTMLにコピーされますので、よろしければ試してみてください。

今月GitHubに作成したpublicリポジトリを振り返る(2020年8月)

一月の成果として振り返ることで来月も頑張れる気がしたので、振り返ります。

確認については下記のシェルコマンドを叩きました。

curl https://api.github.com/users/shinshin86/repos?sort=created | jq -r '.[] | { full_name: .full_name, created_at: .created_at, url: .html_url}'

別に full_name じゃなくて name でもいいのだけど、まあ、あまりこだわりなく打ってしまいました。
それほど数も多くなかったので、上のコマンド打って created_at が今月のやつだけ抜粋しています。
あと、forkしているRepositoryは除外しています。 なお、このコマンドを今日(8/31)に打って、集計するという、再現性がまったくない方法で集計しておりますので、ご了承ください。

以下、新しい順から

あと、ここから文章を です。ます調 から変更します。なんとなく気分が変わったので。

3-random-colors-cli

GitHub - shinshin86/3-random-colors-cli: This tool generates three random colors on the CLI. You can run it in the Node.js environment.

Node.js製のCLIツール。
CLIツールを作るとき、文字に色を付けたい時がある。
で、その色を複数用意したいときに、どういう色の組み合わせでいこうか、いちいち考えなくて済むようにランダムな3種類の色を生成するツールを作った。
色自体はトライアド配色で出力するようにしている。

kisochishiki.com

triad-colors-js

GitHub - shinshin86/triad-colors-js: Get 3 color code list of Triad color scheme palette.

TypeScriptで書いたライブラリ。
上に書いた 3-random-colors-cli 内でも利用している、トライアドの色相を実際に出力する部分の処理はこちらで書いている。
といっても、ライブラリがあったので、それを利用しているだけで別に難しい処理は書いていない。
CLIで書く場合、別の場面でも使えそうな処理は単体のライブラリとして出しておいたほうが今後役に立ちそうだなと思ったので、予め分けた。

go-discogs-random-music-album

GitHub - shinshin86/go-discogs-random-music-album

Discogs API経由でランダムなアルバム情報を取得するだけのGo製のCLIツール。
音楽をdigするツールとして作った。
そういえば作ったはいいが、使っていなかったので今使おう笑。

で、出てきたのが、これ。
※実行ログ

go-discogs-random-music-album

# ↓結果
Fetch release url:  https://api.discogs.com/releases/3095470
status: 200 OK
Album Title: The Sea
Artist Name: Melanie C
Discogs ID: 3095470
Discogs Resource URL: https://api.discogs.com/releases/3095470

www.youtube.com

マジで全く知らないアーティストが出てきたが、おかげでまた知らない音楽を知ることが出来た。
これCLI製だと使える人が限られてしまうので、web版も作ろう。普通に便利ツールじゃないか(自画自賛)

Melanie C いい感じでした。

imgur-anonymous-web-uploader

GitHub - shinshin86/imgur-anonymous-web-uploader: Imgur anonymous web uploader

imgurに画像を匿名アップロードするためのwebツール。
そういえば作りかけのままだった。。タイミングが来たら、取り掛かろう。

metatag-gen

GitHub - shinshin86/metatag-gen: CLI tool of meta tag generator

Web作成に必要なmetaタグを生成するためのGo製のCLIツール。
Web開発で使うツールなのに、CLIで使わなくてもいいじゃん!というツッコミが入りそうだが、今月はGoを勉強していたということもあり、色々やってみたかったのだ。

HTMLタグを生成するためのツールは、Web上にも作っているので、手っ取り早く必要なHTMLタグを生成したいという方はこちらをご利用ください。 BULMAやBootstrapを始め、有名なCSSフレームワークにも対応している。
自分自身が頻繁に個人でもWeb開発を行っているので、そちらでの作業を効率化するために作成した。
機能要望とかあればツイッターまでご連絡ください。

html-generator.shinshin86.com

add-setting-prettier-for-package-json

GitHub - shinshin86/add-setting-prettier-for-package-json: This is a tool for use when writing JavaScript programs. Add the "prettier" setting that you have set in your config file to your "package.json".

めっちゃ作りかけだった。。。
JSプロダクトを作るとき、いつもやるprettierの設定を簡単にしたいという自身の要望から生まれる予定のCLIツール。

dependabot-config-generator

GitHub - shinshin86/dependabot-config-generator: CLI tool for Dependabot config generate.

Dependabot に関する設定ファイルを簡単に作るためのNode.js製のCLIツール。
簡単に作れるぶん、細かな設定はできないが、個人的には これぐらいシンプルでいいんだよ〜 と言った感じ。 最近はもうこのツールを作ってDepenedabotに関する設定ファイルは生成している。
ちなみにこのDependabotの設定ファイルは色々と細く設定ができるのだが、そちらは adavanced オプションとして利用できるようにする予定。
だが、進捗はいまいち遅め。。。

html-selector-checker

GitHub - shinshin86/html-selector-checker: CLI tool of html selector checker implementation with Go.

スクレイピング時の調査用のGo製CLIツール。 スクレイピングしたいページのHTMLファイルをとりあえず落としてきて、ちょっと調査してみるか的なノリで使うためのツール。

yjn-topics

GitHub - shinshin86/yjn-topics: CLI tool of fetch Yahoo Japan News Topics.

Yahoo Japan NewsをCLI上で読むためのツール。
開発の合間にニュースの概要だけ読みたいってときに、割と使える。

こんな感じで使える。

https://github.com/shinshin86/yjn-topics/raw/master/gif/demo.gif

振り返り

publicリポジトリだけでも意外と作っていたな、という気持ち。
自分は頭がバカなので、とりあえず手を動かさなければ、覚えられないタチ。
スマートとは真逆のタイプだが、自分の性格を悲観してもしょうがないので、とりあえずやる。
Goはずっと苦手意識があったけど、とりあえず書いていたら、少しは慣れてきた気がする。
ここには書いていないが、goroutineを使った処理にもチャレンジできたので、来月はもう少し幅を広げて頑張りたいところ。
(下に少し書いています)

nikki.shinshin86.com

あとはGitHubでスターをもらえるようにも頑張りたいところ。
自分が作ったものに対して、人からもイイネ!されたい欲求ありまくりです★★★

macOSをCatalinaにしたらZsh環境が壊れたので対応した備忘録 (zsh:1: url-quote-magic: function definition file not found)

macOSをCatalinaにした際の対応に関する備忘録。
といっても、色々調べていた割に、いざ解決方法が見つかると、大したことでもなかったので、まあブログに書くほどでもないかもしれないと感じるのだが、それでも書く。

まずCatalinaにあげてシェルを立ち上げたら下記のようなエラーが出て、キー入力すらできなくなってしまった。
(キーを入力すると、このエラーが発生して何も出来ない状態)

zsh:1: url-quote-magic: function definition file not found

上に貼ったツイッターのとおりにbashを立ち上げて問題解決を行った。

原因としては下記のissueで話されているような要因かと思われる。
(英語読み違えていたらすんません)

github.com

oh-my-zshを入れている場合、.zshrc 内にいろいろな記述が追加されていると思うが、この.zshrc内のfpathという変数に下記のような記述がある。

/Users/〇〇/.oh-my-zsh/functions

ここで参照しているはずのfunctions というディレクトリが実際には存在しておらず、これでエラーになっているようだった。
このzshfunctions というディレクトリはmac環境であれば、だいたい以下のようなディレクトリにあると思う。
(インストールしているバージョンによってパスは異なると思うので、そこは適宜読み替えてください)

/usr/local/Cellar/zsh/5.5.1/share/zsh/functions

で、ここにあるfunctions というディレクトリを .oh-my-zsh 以下にコピーしたら、動いた。

これ以上原因を追うことはしなかったのでこれは憶測だが、アップデートした際に本来あるはずのディレクトリコピー処理などがうまく動かなかったりしたのだろうか?

ts-loader(webpack)を用いてのTypeScript開発の際、Node.js実行のためのshebangでTypeScriptのコンパイルエラーが起きたときの対応メモ

なんだかタイトルが長ったらしくなってしまった。

Node.js製のCLIツールを作っていた。 npmにてリリースして、globalインストールして使う予定だ。

そちらのツールに関する内容は本題ではないので、一旦そちらは脇にどけておく。
(たぶん、またどこかでそれについても書くと思う。ってか、このあと、話題に関係する形でコミット内容をしれっと貼らせていただきます。だけども、まだ開発段階です。)

そのようなツールを作る場合、Node.jsではファイルの先頭に shebang を記述して、実行環境のnodeを参照するようにする必要がある。

#! /usr/bin/env node

今回このような形式のNode.jsのCLIツールをTypeScriptで書いていた。 ビルド環境はwebpack。ts-loader を用いてビルドしている。 ところがこの shebang を書いた状態でビルドすると、下記のようなエラーになってしまった。

Module parse failed: Unexpected character '#' (1:0)

shebang が認識されていないようだ。

下記のStack overflowの回答を元に対応した。

stackoverflow.com

stackoverflow.com

解決方法

shebang-loader をインストールする。

npm install --save shebang-loader

webpack側に設定する。 なお shebang-loader 自体はコンパイル時に shebang を消しているだけで、コンパイル後のソースに持っていってくれたりはしない。

shebang-loader/index.js at master · JavascriptIsMagic/shebang-loader · GitHub

そのためwebpack側で直接 shebangコンパイル後のソースにも追加するという、割と泥臭い対応を行う必要がある。
( shebang-loader 側では仕組み的にそこまで行うことは出来なそう?)

実際に書き換えたDiffが下記となる。

iff --git a/webpack.config.js b/webpack.config.js
index 3cbcad0..7978c19 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,3 +1,4 @@
+const webpack = require('webpack');
 const isProduction = process.env.NODE_ENV === "production";

 module.exports = {
@@ -8,7 +9,7 @@ module.exports = {
     rules: [
       {
         test: /\.ts$/,
-        use: ["ts-loader"],
+        use: ["ts-loader", "shebang-loader"],
         exclude: /node_modules/
       }
     ]
@@ -18,5 +19,8 @@ module.exports = {
   },
   output: {
     filename: "index.js"
-  }
+  },
+  plugins: [
+    new webpack.BannerPlugin({ banner: "#!/usr/bin/env node", raw: true }),
+]
 };

これでビルドエラーがなくなり、コンパイル後のソースにも shebang が追加されたため、実行も問題なくできるようになった。

実際に対応した際のコミットはこちらになる。
(以前もこちらのブログに書いたかもしれないが、JUGEM XMLMarkdownに変換するためのツールとなります。)

github.com