ブックマーク / zenn.dev/skanehira (14)

  • GopherがRust入門したので違いをまとめてみた

    はじめに ウホウホ。 Rustを使い始めてちょうど2年くらい経って、すこしRustのことがわかってきたので、改めてGoRustのそれぞれの違いを整理したいなと思いこの記事を書きました。 筆者はウェブ開発の経験しかないので、ウェブを中心にまとめています。 気づいたらかなりな量になってしまったのとGopher向けにRustを紹介するような記事になってしまいましたが、よければ読んでみてください。 筆者について Goを使い始めて7年ほど経っていて、これまでCLI/TUIツールをいくつか作ってきました。 スペシャリストではないですが、プロダクトでGoを書く分には特に問題ないレベルかなと思います。 Rust2022年夏ころから使い始めてちょうど2年ほど経ちました。 なにかツールを作ったわけではないですが、勉強がてらにいくつか作ったもの・書いたがあります。 普通にRustを書く分には問題ないですが

    GopherがRust入門したので違いをまとめてみた
    kkeisuke
    kkeisuke 2024/08/12
  • JavaScriptの正規表現でgフラグを使う際は気をつけた方が良い

    はじめに 先日こちらのツイートが流れてきました。 動画内では次のことをやっていました。 何が起きているのか、まったくわからなかったので気になってこの挙動について調べて備忘録として残します。 > const r = /boop/g undefined > r.test("boop") true > r.test("boop") false > r.test("boop") true > r.test("boop") false > gフラグとは JavaScriptを書いている方は一度くらいは/foo/gみたいな正規表現を書いたことがあるかと思います。 このgフラグをつけることで文字列内のすべてのfooが対象になります。 たとばfoobarfooの場合/foo/だと先頭のfooのみが対象になりますがgフラグを使うとbarのあとにfooも対象になります。 詳細はMDNを参照して下さい。 las

    JavaScriptの正規表現でgフラグを使う際は気をつけた方が良い
    kkeisuke
    kkeisuke 2024/05/29
  • マルチプラットフォームでクリップボードを扱えるDenoモジュールを作った

    初めに Denoでクリップボードを扱うモジュールdeno-clippyを作ったので、 それの宣伝と学んだことを書いていきます。 ちょうど一年前にこんな記事を書いてありましたが、このライブラリは画像のみでした。 deno-clippyは画像(PNG)とテキスト両方を扱えます。 使い方 こんな感じで使います。 特に変わったことはなく、シンプルな感じです。 import * as clippy from "https://deno.land/x/clippy/mod.ts"; import { readAll } from "https://deno.land/std@0.152.0/streams/conversion.ts"; // write image to clipboard const f = await Deno.open("testdata/out.png"); await cl

    マルチプラットフォームでクリップボードを扱えるDenoモジュールを作った
    kkeisuke
    kkeisuke 2022/08/22
  • LanguageToolのLinterで英文法をチェック

    初めに ども、今年から格的に英語を勉強し始めたゴリラです。 みなさん、英文法チェックするときはどうしていますか? GrammarlyやDeepLを使って翻訳した文を確認する、といったやり方があるかと思います。 しかし、自分はVim英語を書くのがメインになることが多いため、Vimで英文を書きながら、間違った場合は指摘してほしいなと思っています。 そこで、LanguageToolを使って、必要に応じて文法チェックをしてくれるようにLintツールlanguagetool-lintを作りました。 今回の記事はこのLintツールの紹介になります。 使い方 まず最初にLanguageToolをインストールする必要がありますが、Dockerがある場合は次のコマンドでサーバを立ち上げられます。

    LanguageToolのLinterで英文法をチェック
    kkeisuke
    kkeisuke 2022/01/22
  • コンテナで動くGoアプリをデバッグする方法

    初めに 最近開発環境を整備していて、コンテナでGoアプリケーションをリモートでデバッグするのにちょっと面倒だったので、自分のメモも兼ねてやり方を残しておきます。 要件 プロジェクトによりますが、今の現場では主要エディタがVSCodeです。 もちろんVimユーザー(うち一人はぼく)がいるので、ターミナルでもデバッグできるように対応する必要があります。 また、コード変更を反映させるために都度イメージをビルドしてコンテナを再作成するは開発スピードが落ちるため、コンテナ再起動だけで反映されるようにする必要があります。 デバッガのしくみ Goにはdelveというデバッガがあります。 delveはClient-Serverモデルになっていて、次の2つのプロトコルで通信が可能になります。 JSON-RPC DAP JSON-RPCはdelveのCLIに使われています。 DAPはMicrosoftが策定し

    コンテナで動くGoアプリをデバッグする方法
    kkeisuke
    kkeisuke 2021/11/28
  • Goで家電を操作できるremonadeを作った

    初めに 最近、Nature Remoを買って、家電をスマホで操作できるようにしました。 Nature Remoは赤外線を使って家電を操作できるスマートリモコンで、いくつか種類がありますが、ぼくはNature Remo mini 2を買いました。 スマホで家電を操作できるのはたいへん便利ですが、 普段ずっと仕事などでPCとにらめっこしているので、ターミナルでも家電を操作できたら便利だなと思ってremonade(レモネード)というCLIを作りました。 remonadeについて Nature RemoはAPIを公開しているため、CLIでAPIをたたけばスマホアプリの代わりに家電を操作できます。 たとえばcurlを使うと家電一覧を取れます。 curl -s -H "Authorization: Bearer ${NATURE_REMO_TOKEN}" https://api.nature.glob

    Goで家電を操作できるremonadeを作った
    kkeisuke
    kkeisuke 2021/07/04
  • 新しい docker compose

    初めに docker composeが使えるようになったので、それについて書いていきます。 正式名称はDocker Compose CLIです。 動作検証した環境は次のとおりです。 $ docker version Client: Cloud integration: 1.0.14 Version: 20.10.6 API version: 1.41 Go version: go1.16.3 Git commit: 370c289 Built: Fri Apr 9 22:46:57 2021 OS/Arch: darwin/arm64 Context: default Experimental: true ... Docker Compose CLIとは 簡単にいうとdocker-composeのGo実装です。docker-composeと互換しています。 docker-composeに置

    新しい docker compose
    kkeisuke
    kkeisuke 2021/06/04
  • GoでCLIを作る時のテンプレートリポジトリを作った

    初めに 普段Goを使ってCLIなどを作ることが多く、毎度CI/CDをセットアップしたり、go getでライブラリを導入するが面倒なのでテンプレートリポジトリgo-cli-templateを用意しました。 基的に自分用ですが、ちょっと手を入れればみなさんも使えるので軽く紹介していきます。 デフォルトセット GitHub Actions(以降GA)を使って以下を設定してあります。 golangci-lint test binary release golangci-lintはGAがあるので、それをそのまま使っています。 使う人の好みもあるので.golangci.yamlはあえて設置していないです。各自好きに置いてくださいという感じです。 binary releaseはgoreleaserのGAを使っています。タグをつけてpushするとReleasesにCHANGELOG、ハッシュ、各OSのバ

    GoでCLIを作る時のテンプレートリポジトリを作った
    kkeisuke
    kkeisuke 2021/04/22
  • Goに関する色々

    gzip圧縮しながら、レスポンスを返す方法 Content-Encodingを使用することで、Client <-> Server 間は圧縮されたレスポンスでやり取りできる。 ただし、pngファイルなどすでにdeflate圧縮されているものはContent-Encodingを使っても転送時間をあまり短縮できないので、使い所が割と限定される。 package main import ( "compress/gzip" "io" "log" "net/http" "os" ) func main() { http.HandleFunc("/gzip", func(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Encoding", "gzip") f, err := os.Open("file.txt") if

    Goに関する色々
    kkeisuke
    kkeisuke 2021/04/22
  • yamlをインタラクティブに絞り込みできるCLIを作った

    初めに 最近仕事で少しk8s周りを触っています。k8sのマニフェストはyamlですが、 kustomizeなどを使ってリソースをまとめたりすると、どうしても長くなってしまい可読性が下がってしまう問題があります。 そこで、jidのようなインタラクティブに絞り込みできるツールがほしいなと思って調べたんですが、 見つからなかったのでydというCLIを作りました。 使い方 ydではパイプ、ファイル、URLからyamlを読み込めます。 $ yd file.yaml $ yd https://sample.com/file.yaml $ yd < file.yaml $ yd -f file.yaml CLI実行後、画面上部にクエリを入力する箇所があるので、そこにクエリを入力してyamlをインタラクティブに絞り込んでいきます。 たとえば次のようなyamlがある場合.tagsと入力すると画像のように絞り

    yamlをインタラクティブに絞り込みできるCLIを作った
    kkeisuke
    kkeisuke 2021/03/21
  • GitHubのTUIツールを作った

    機能 現時点ではissue関連の機能が実装されています。未実装の機能はこちらを参照ください。 Issue list create close open open browser preview edit Issue comment list preview delete 基的な使い方 リポジトリを指定して起動するか、指定しない場合はカレントディレクトリのリポジトリが自動で指定されます。 起動後にissueの検索が行われ、一覧が表示されます。パネルを移動するにはCtrl-N/Ctrl-Pを使います。 検索 github-tuiではsearchのクエリを使ってissueを検索できます。現時点ではissueのみ検索可能ですが、将来的にはPRなども検索できるようにする予定です。 どんなクエリが使えるかは、searchのドキュメントを参照していただければと思います。 たとえばissueのタイトルと

    GitHubのTUIツールを作った
    kkeisuke
    kkeisuke 2021/02/22
  • Swaggerをプレビューする簡単なCLI

    初めに 仕事APIのドキュメントにswaggerを使っていますが、プレビューするために毎度VSCodeを立ち上げて使っていました。 しかし、このためだけにVSCodeを起動するのはさすがにオーバースペックでそれに耐えられず、簡単なCLIを作りました。 使い方 コマンドの引数にswagger.yamlを指定します。そうするとサーバが立ち上がってブラウザが開きます。 $ spr api.yaml 2021/02/02 21:51:46 start server: 9999 2021/02/02 21:51:46 watching swagger.yaml デフォルトポートは9999ですが、環境変数PORTを使えば変更できます。 PORT=8080 spr api.yaml あとはファイルを編集するたびに画面も更新されます。 しくみ 簡潔にいうと次のようなしくみになっています。 プレビューはs

    Swaggerをプレビューする簡単なCLI
    kkeisuke
    kkeisuke 2021/02/05
  • Neovimを始めた話

    初めに 11月中旬くらいからNeovimを使い始めました。 Neovim自体は以前から知っていたが、自分が普段作っているプラグインがVimでしか動かないことや、Vimでだいたい満足しているのでなかなか使おうって気になれませんでした。 そこでgh.vimというプラグインのNeovim対応をするため、Neovimをビルドしてから少しずつNeovimを使うようになりました。 今日はVimを使ってきた筆者がNeovimを少し使った感想の話をしていきます。 NeovimVimの違い Vimは後方互換を大事にしているので劇的な変化があまりないのに対して、 Neovimは時代に合わせてよりモダンな技術を積極的に取り入れる、というスタンスの違いがあるように感じています。 Neovimのモダンな技術といえば次でしょうか。(ほかにもっとあるかもしれないが…) ターミナル LSP(builtin) リモートプ

    Neovimを始めた話
    kkeisuke
    kkeisuke 2020/12/10
  • xormでマイクロ秒の日付保存でハマった話

    始め GoのxormというORMMySQL仕事で使っていますが、 マイクロ秒の日付を保存できないという謎の動きをしていたので、調査と対処をしたというお話です。 結論 2020/10/23時点xormMicrosoft SQL Server以外のRDBにマイクロ秒の日付を保存できません。 旅の始まり 仕事で次のカラムにtime.Timeのデータを保存しようとしたら、マイクロ秒のところが0のままなっていました。 mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | date | datetime(

    xormでマイクロ秒の日付保存でハマった話
    kkeisuke
    kkeisuke 2020/10/24
  • 1