【TypeScript】ファイルを分割し、任意の分割ファイル数で復元できる nao1215/horcrux を作った話【分霊箱】

【TypeScript】ファイルを分割し、任意の分割ファイル数で復元できる nao1215/horcrux を作った話【分霊箱】

前書き: jesseduffield/horcrux を参考にした 「Yet Another Horcrux を作ったよ」というお話をします。 Horcrux は、ハリーポッターに登場する用語で、日本語では分霊箱と訳されています。闇の魔法使いが不死になるために自らの魂を分割して、自らの魂を隠した物体を指します。この物体が存在する限り、現世に留まれることができます。予め断っておきますが、私はハリーポッターがそこまで好きではありません。ネタとしては好き。「フォフォイのフォイさ」や「ハリー< 二次会は嫌だ、二次会は嫌だ…… 組分け防止 < フィリピンパァアアアアアアアブ!!! 」とか。 ...

October 5, 2025 · 4 min
【nao1215/prompt】コードを読むのが辛いから、放置されたOSSをforkせずに作り直した話

【nao1215/prompt】コードを読むのが辛いから、放置されたOSSをforkせずに作り直した話

前書き:OSSが放置されることは当然のようにある 「OSSは、人気があれば活発にメンテナンスされる」 そのように考えている方がいらっしゃるのではないでしょうか。現実は、そこまで甘くありません。私が利用していた c-bata/go-prompt(5.4 stars)は、ライブラリとして採用した時点でメンテナンスが滞っており、結局3年間殆ど更新はありませんでした。 ...

September 20, 2025 · 6 min
【Golang】CSV, TSV, LTSVをsql.DBで操作するfilesqlパッケージを作った話

【Golang】CSV, TSV, LTSVをsql.DBで操作するfilesqlパッケージを作った話

前書き:同じ機能を持つコマンドのメンテが面倒だった filesql パッケージは、SQL ドライバーであり、SQLite3 のSQL 構文を使用してCSV、TSV、LTSV ファイルにクエリを実行できます。リリースして1週間経っていませんが、過去2番目の勢いで GitHub Star を獲得できています。嬉しいことですね。 ...

August 28, 2025 · 8 min
夏休みの自由研究として自作プログラミング言語をClaudeでVibe Codingした話

夏休みの自由研究として自作プログラミング言語をClaudeでVibe Codingした話

前書き:妻と息子が不在の一足早い夏休み 仕事が谷間(= 夏休みが取れる状況)、かつ妻と息子が旅行で不在だったので、ある程度規模感があるOSSを作ろうと思いたちました。今回、実装期間2日で開発したのは、SNOW言語(関数型言語)です(補足:夏休みは2日以上あります) ...

August 7, 2025 · 9 min
GoユーザーがHaskell/OCamlのライブラリ配布で面食らった話

GoユーザーがHaskell/OCamlのライブラリ配布で面食らった話

前書き 本記事画像には、Gopherを用いています。オリジナルのThe Go gopher(Gopherくん)は、Renée Frenchによってデザインされ、CC BY 4.0ライセンスが適用されています。 ...

June 28, 2025 · 9 min
O'Reilly Learning PlatformをAudify(耳)で学習する

O'Reilly Learning PlatformをAudify(耳)で学習する

 前書き:O’Reilly Learning Platformは高め タイトルが全てなのですが、どのような経緯でAudifyを使い始めたかを記録として残します。 ...

May 25, 2025 · 4 min
GitHub Personal Access Tokenをコミットする人がいた話、類似例、漏洩対策ツール【GitHub Secret scanning、gitleaks、git-secrets、gitguardian】

GitHub Personal Access Tokenをコミットする人がいた話、類似例、漏洩対策ツール【GitHub Secret scanning、gitleaks、git-secrets、gitguardian】

 前書き:セキュリティのお勉強中 本記事は、ユーザー2376名のGitHub リポジトリ8017件を調べたら、GitHub Personal Access Token 16件(全て失効済み)が見つかったという話です。悪用されたら困るので、トークン探しに使ったコードは公開しません。 ...

April 27, 2025 · 5 min
【機能強化】RDBMS/CSV/TSV/LTSVクライアントであるsqluvをhttps/s3/圧縮フォーマットに対応させ、カラースキームを追加

【機能強化】RDBMS/CSV/TSV/LTSVクライアントであるsqluvをhttps/s3/圧縮フォーマットに対応させ、カラースキームを追加

前書き:大幅に機能追加 nao1215/sqluvは、2週間前に「【Go】sqluvコマンド:DBMS用のTUI + CSV/TSV/LTSVにSQLを実行可能【開発背景や使い方、生成AIの活用】」に記事で紹介しました。この記事に対する反応がそこそこあったので、「これはチャンスだ」と考えて、大幅に機能追加/バグ修正をしました。 ...

March 22, 2025 · 6 min
qhqで管理しているリポジトリをVS Codeで開くシェル関数

qhqで管理しているリポジトリをVS Codeで開くシェル関数

前書き 複数のリポジトリを用いて開発している人は、x-motemen/ghqでリポジトリを管理するケースが多いでしょう。本記事では、ターミナルからghqで管理しているリポジトリをVS Codeで開く方法を紹介します。 ツールインストール x-motemen/ghq および peco/peco を利用します。以下はgoコマンドを利用したインストール方法です。他のインストール方法を利用する場合は、公式サイトを確認してください。 ...

March 17, 2025 · 2 min
【Go】sqluvコマンド:DBMS用のTUI + CSV/TSV/LTSVにSQLを実行可能【開発背景や使い方、生成AIの活用】

【Go】sqluvコマンド:DBMS用のTUI + CSV/TSV/LTSVにSQLを実行可能【開発背景や使い方、生成AIの活用】

sqluvとは nao1215/sqluv は、DBMS(例:MySQLやPostgreSQL)クライアントの一種であり、Text User Interfaceを提供します。 sqluvは、ローカルのCSV/TSV/LTSVファイルをインポートし、それらのファイルに対してSQLを実行する機能も持ちます。この機能は、私が以前開発したnao1215/sqlyコマンドから移植しています。 ...

March 8, 2025 · 6 min
【Golang】fe3dback/go-arch-lintでアーキテクチャの破壊を防ぐ

【Golang】fe3dback/go-arch-lintでアーキテクチャの破壊を防ぐ

前書き:アーキテクチャは容易に壊される アーキテクチャリンターであるfe3dback/go-arch-lintをnao1215/sqlyに導入したので、使用方法のメモを記事として残します。結論としては、初期設定が面倒ですが、期待通りの効果が得られました。なお、既存コードがカオスなアーキテクチャの場合、go-arch-lintを採用できないと思われます。 まず、アーキテクチャをリンターでチェックする発想に至った理由から、説明します。以前、ペアプロ中にドライバ側(実装する人)がアーキテクチャルールに反しているのを偶然目撃しました。違反内容は、「外部サービス操作用パッケージ内でのみ使用できる構造体をユースケースレイヤーから呼び出した」というものです。構造体の定義場所が悪いと思いつつも、ルール違反してしまう理由はアーキテクチャを理解していないからだと考え、対策が必要と考えました(ちなみに、ドライバの方に「その使い方、ダメですよ」と声をかけたら、「そうなんですか?」と返答がありました) ...

February 13, 2025 · 7 min
【何をどこに書く?】Pull Requestマージ速度を上げるためにドキュメンテーションコメントを書く

【何をどこに書く?】Pull Requestマージ速度を上げるためにドキュメンテーションコメントを書く

前書き:ドキュメンテーションコメントの書き方が分からん 本記事は、「【GitHub Actions】 github/issue-metrics でPRマージにかかる時間を分析」に関連する記事です。2024年は、Pull Request(以降PR)をマージするまでにかかる時間を如何に短縮するかに、課題感がありました。 ...

January 26, 2025 · 10 min
【GitHub Copilot】「もっとAIを使った方が良いですよ」とアドバイスする時代になった

【GitHub Copilot】「もっとAIを使った方が良いですよ」とアドバイスする時代になった

前書き:AIが当たり前の時代に OpenAIが2022年11月にChatGPTをリリースしてから、AIを利用した様々なツールが登場しました。AWS Summitに行けば、Amazon Bedrockを用いて業務生産を向上させた事例がメイントピックでした。直近の技術系の話題(例:ブロックチェーン、web3.0)と比較すると、AIの普及速度が早く感じました。 ...

January 25, 2025 · 6 min
【どうやって見積もりしてますか?】プロジェクト工数を見積もるときの私なりのやり方【ボトムアップ見積り】

【どうやって見積もりしてますか?】プロジェクト工数を見積もるときの私なりのやり方【ボトムアップ見積り】

前書き:超概算見積もり?KKD法でいいですか? 私は、立場上、プロジェクトの工数を見積もることが多いです。 しかし、自分が担当していない領域(例:iOSやAndroid)の見積もりは流石にできません。そこで、他メンバに作業を依頼します。そのタイミングで、次のような質問を受けることがあります。 ...

January 11, 2025 · 7 min
【GitHub Actions】 github/issue-metrics でPRマージにかかる時間を分析

【GitHub Actions】 github/issue-metrics でPRマージにかかる時間を分析

前書き:PRマージに時間がかかっていた 2024年は、私のPull Request(PR)がなかなかマージできない課題がありました。 このように書くと「あなたが書いたPRのサイズが大きかったり、色々と他者に配慮できていないだけでは?」と考える人もいらっしゃるかもしれません。その可能性は当然あります。 ...

December 31, 2024 · 5 min
【Golang】Value Objectを生成するvogenライブラリをお試しで作った話

【Golang】Value Objectを生成するvogenライブラリをお試しで作った話

前書き:GolangでValue Objectを作りづらい 2025年の抱負で「ブログのアウトプットを増やす(リンク先の末尾を参照)」と宣言したので、早速アウトプットします。 今回取り扱うValue Objectとは、主に以下のような特徴を持ちます(本記事の本題と関係ない要素は意図的に省略しています) ...

December 28, 2024 · 6 min
【寄稿】Software Design 2024年12月号 第1特集 第4章 落し穴に落ちないシェルスクリプト開発のススメ

【寄稿】Software Design 2024年12月号 第1特集 第4章 落し穴に落ちないシェルスクリプト開発のススメ

祝!Software Design 3回目の寄稿 技術評論社のSoftware Design 2024年12月号 第一特集に寄稿させていただきました。3回目です。びっくり!未読の方は、是非ご一読ください。 過去2回に引き続き、内容はシェルスクリプトに関する記事です。2022年1月号はPythonに関して説明していますが、シェルスクリプトと比較した記事になっています。過去の寄稿に関する感想は、別記事でまとめてあります。 ...

December 7, 2024 · 7 min
【Golang】AWS Rainbowプロジェクト始めました - インタラクティブにS3操作するs3hubコマンド

【Golang】AWS Rainbowプロジェクト始めました - インタラクティブにS3操作するs3hubコマンド

前書き 2023年に「2024年のOSS活動は、AWSユーティリティツールに絞ること」と目標を立て、AWS関連のOSSをまとめるRainbowプロジェクト(nao1215/rainbow)を作り始めました。早いもので2024年も1ヶ月経ったので、何か作ってないと進捗上マズイですよね!一つ作りましたよ!(後述) Rainbowは、私の好きなRitchie Blackmore’s Rainbowから拝借しました。複数のツールやライブラリを集約する予定なので、虹というネーミングは無難なところだと思ってます。 ...

February 5, 2024 · 5 min
【Golang】hottest - ユニットテストのエラーメッセージを抽出するCLI/GitHub Actionsを作った話

【Golang】hottest - ユニットテストのエラーメッセージを抽出するCLI/GitHub Actionsを作った話

前書き 本記事は、フラー株式会社 Advent Calender 2023 の4日目の記事です。3日目は、@ujikawa1026さん の「マネージャーはなぜ忙しいのか。3年間やって少し分かってきたこと」です。 本記事の主題:hottestの紹介/宣伝 本記事では、2023年に私が開発したOSSの中で出来が良い部類のnao1215/hottest を紹介します。hottestは、E2Eテスティングフレームワークであるgo-spectest/spectestの開発中に生まれたサイドプロジェクトです。 ...

December 3, 2023 · 8 min
GitHub Actionsが全成功かつパッチ/マイナーアップデートの場合は、Dependabotが作成したPRを自動マージする設定

GitHub Actionsが全成功かつパッチ/マイナーアップデートの場合は、Dependabotが作成したPRを自動マージする設定

前書き 今どきは、zero dependency(依存なし)で開発を進めるよりも、便利なOSS(ライブラリ)を利用してサクッと開発する方が多いのではないでしょうか。他の人が開発したライブラリは日々改良されていくので、ライブラリ更新をサボっていると「自分のOSSが知らない間に動かなくなってしまった!」という状況になるかもしれません。 ...

October 11, 2023 · 5 min
DependabotでGitHub ActionsのActionを最新に保つ方法

DependabotでGitHub ActionsのActionを最新に保つ方法

前書き:絶滅へ向かうJenkinsオジサン 結論ですが、GitHub公式ドキュメント「Dependabot でアクションを最新に保つ」を読めば、GitHub ActionsのActionを最新に保つ方法が分かります。ちなみに私は、現職のテックリードから教えていただいて「なにこれ便利だ」と思った記憶があります。 ...

September 30, 2023 · 3 min
GitHub ActionsでBSD(FreeBSD、OpenBSD、NetBSD、Dragonfly BSD)のユニットテスト環境を構築する方法

GitHub ActionsでBSD(FreeBSD、OpenBSD、NetBSD、Dragonfly BSD)のユニットテスト環境を構築する方法

前書き:BSDはクロスプラットフォーム対応の鬼門 私は、GolangでOSSを開発することが多く、Golangは様々なOS向けの実行バイナリを簡単に作成できる特徴があります。この特徴を活かして、「クロスプラットフォーム対応しよう!」と考えるのは自然なことです。 ...

September 16, 2023 · 5 min
【Docker】DynamoDB localをローカル起動する方法【管理画面付き】

【Docker】DynamoDB localをローカル起動する方法【管理画面付き】

前書き:DynamoDB、はじめまして 本記事では、DynamoDBをローカルで起動する方法を説明します。DynamoDBは、AWSが提供するNoSQLデータベースです。サーバーレスのKey Valueストアであり、フルマネージドサービスです。 検証環境 本記事は、Ubuntu環境で検証しています。Docker Composeを使用するため、別途インストールが必要です。 ...

September 10, 2023 · 3 min
【golang】io.Readerを使いまわしてContentType判定、S3アップロードしたらハマった話

【golang】io.Readerを使いまわしてContentType判定、S3アップロードしたらハマった話

前書き:同じハマりを繰り返す Single Page Application(SPA)をAmazon S3にアップロードする機能を持つspareコマンドを開発しているとき、io.Readerの使い方を間違えて少しハマってしまいました。ハマりの原因はio.Readerで読み出すデータが欠損していたことであり、欠損の原因はio.Readerを使いまわしたことです。 このハマり方は2回目なので、備忘録として記事にします。 ...

September 10, 2023 · 6 min
Golangを用いたサーバーサイド:技術選定と現状の小さな課題

Golangを用いたサーバーサイド:技術選定と現状の小さな課題

前書き 本記事では、Golangを用いてRESTful APIを開発する上で私が使用している技術(OSS)を述べた後、より良い開発体験を得るための改善したい点(解消したい課題)について述べます。 ...

May 19, 2023 · 11 min
AndroidプラットフォームアーキテクチャでJavaが採用されている理由は、エンジニア人口が多いから

AndroidプラットフォームアーキテクチャでJavaが採用されている理由は、エンジニア人口が多いから

前書き:何故AndroidはC/C++がメインではないのか AndroidでJavaを採用した理由が気になって夜しか眠れなかったので、調べました。 まず、前提をおさらいします。Androidプラットフォームは、ハードウェアを制御するためにLinux Kernelを採用しています。その上にハードウェアを抽象化するためのHALレイヤーがあり、C/C++とJavaランタイム(Android Runtime)がHALの上にあります。最近では、NativeライブラリにRustも採用され始めたと聞いています。 ...

April 17, 2023 · 6 min
【Android Studio】JSON To Kotlin ClassプラグインでAPIレスポンス用モデルの作成を楽に

【Android Studio】JSON To Kotlin ClassプラグインでAPIレスポンス用モデルの作成を楽に

前書き Androidアプリでは、RESTful APIの実行結果(≒ jsonデータ)に対応するdata classを作成し、kotlinx.serializationでjsonをdata classにデシリアライズする処理があります。 ...

April 1, 2023 · 4 min
【Golang】CSV/TSV/LTSV/JSONにSQLを実行するsqlyコマンドを作った話【開発背景/設計/使い方】

【Golang】CSV/TSV/LTSV/JSONにSQLを実行するsqlyコマンドを作った話【開発背景/設計/使い方】

前書き 本記事は、フラー株式会社 Advent Calendar 2022の5日目の記事です。4日目の記事は、「フラーを卒業していった優秀な学生アルバイトに向けたポエム(@furusax)」です。ポエムと言いつつ、技術的なお話でしたね。 本記事では、CSV/TSV/LTSV/JSONに対してSQLを実行する"sqly"コマンド(自作ツール)について解説します。sqlyの基本機能を簡単に説明した後、開発した背景、設計、使用しているパッケージについて説明し、利用例と今後の展望を説明します。 ...

December 2, 2022 · 11 min
【Golang】Windows対応でハマった箇所【ファイルパス、一時ファイル削除エラー】

【Golang】Windows対応でハマった箇所【ファイルパス、一時ファイル削除エラー】

 前書き:Windows君さぁ…… 私は、GolangでCLIツールをよく作ります。CLIツールの品質を担保するために、GitHub Actionsでユニットテスト(Linux、Mac、Windows向け)を継続的に実施しています。 ...

November 27, 2022 · 3 min
【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい

【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい

前書き:sqlcとは 本記事は、kyleconroy/sqlcの基本的な情報を紹介します。 sqlcは、DBスキーマ(DBテーブル定義)、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル(構造体)を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。 ...

June 25, 2022 · 11 min
【勉強期間1ヶ月(60h)】LPIC Level3 303 (Security) 合格体験記【ping-t、黒本使用】

【勉強期間1ヶ月(60h)】LPIC Level3 303 (Security) 合格体験記【ping-t、黒本使用】

資格有効期限切れ 2週間前の滑り込み合格 LPIC有効期限2022年6月3日の約2週間前に、LPIC Level3 303-200(Version 2.0)に合格しました。「転職(組み込みからサーバサイドへのキャリアチェンジ)」「息子の誕生」「Software Designへの記事寄稿」と、生活の変化が多い中でギリギリ合格できて、安心しました。 ...

May 15, 2022 · 4 min
【寄稿】Software Design 2022年6月号 第1特集(第3章 シェルスクリプトの使い方)

【寄稿】Software Design 2022年6月号 第1特集(第3章 シェルスクリプトの使い方)

Software Design誌 2回目の寄稿! 技術評論社のSoftware Design 2022年6月号 第1特集 第3章 「シェルスクリプトの使い方」に寄稿する機会をいただきました!2022年1月号に続いて、2回目の寄稿です。表紙がワンちゃんからネコちゃんに戻っています! ...

May 15, 2022 · 4 min
【Golang】spf13/cobraが提供する入力補完(shell completion)をファイル形式でインストールする方法【bash, zsh, fish】

【Golang】spf13/cobraが提供する入力補完(shell completion)をファイル形式でインストールする方法【bash, zsh, fish】

前書き:spf13/cobraのシェル補完は便利 本記事は、spf13/cobraが提供する「シェル補完(文字列)」をファイルとしてシステムにインストールする例を紹介します。今回の例を実践すると、cobraを用いたCLIコマンドでシェル補完が有効になります。ここでのシェル補完とは、ターミナルでコマンド入力中に[TAB]キーを押すと、自動で単語を補完する機能です。 対象シェルは、bash、zsh、fishです。PowerShellは、私が詳しくないので除外します。 cobraは、Golang用のCLIコマンド作成補助ライブラリです。代表的な機能は、CLIコマンド実行時にオプション/サブコマンドが指定されたかどうかを判定する機能です。cobraを使用した場合、自動的にcompletionサブコマンドが追加され(例:以下に示すposixerコマンドのhelp参照)、このサブコマンドはシェル補完用の文字列を出力します。 ...

April 17, 2022 · 8 min
GitHubで初めてStar 50個以上を獲得した感想と実施した内容【Redditで宣伝】

GitHubで初めてStar 50個以上を獲得した感想と実施した内容【Redditで宣伝】

前書き:人生で初めてGitHub Star 50個超え “go install"したバイナリをアップデートするgupコマンドが、公開から一週間でGitHub Starを50個以上獲得しました!ちょっと嬉しい。最新の仕様は、Zennで説明しています。 ...

February 26, 2022 · 5 min
【Golang】go installで取得した$GOPATH/bin以下のバイナリを一括更新するgupコマンドを試作

【Golang】go installで取得した$GOPATH/bin以下のバイナリを一括更新するgupコマンドを試作

前書き:バイナリの更新が面倒 Golangでは、MacやLinuxのパッケージマネージャ(brew, apt, dnf, snap, etc)を利用せずに、"$ go install"でバイナリをインストールできます。"$ go install"は、開発者がパッケージのスペックファイルを作成せずにバイナリを配布できるメリットがあります。 ...

February 20, 2022 · 6 min
【Golang】goa(ver 1.x)frameworkのlinter(goavl)を試作【go/astを利用】

【Golang】goa(ver 1.x)frameworkのlinter(goavl)を試作【go/astを利用】

前書き:DSLに半日悩み、カッとなって作った goaは、DSLで記述されたデザインをもとに、Web APIホスティングに必要なベース処理(ルーティング、コントローラ、Swaggerなど)を生成するFrameworkです。goaを採用している会社の例は、DMM。goaを使うとコード記述量が減り、APIドキュメントが自動生成される利点があります。 私は、2022年1月からgoaを開発で使用するようになりました。goaは、DSLを覚えるコストが小さくはありません。DSLを書き間違えると、当然goa-designから各種ファイルの生成処理でエラーとなります。 ...

February 11, 2022 · 12 min
【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】

【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】

前書き:Golangでの開発が増えた 最近、Golangで小さいCLIコマンド/ライブラリを書き殴る事が増えました。 その理由としては、環境の変化が大きいです。前職では組み込みエンジニアとして複数言語を使用していましたが、現職ではGolang固定です。Golangを書けば書くほど現職に関係するスキルが上がるので、積極的にGolangを使うようになりました。 ...

February 5, 2022 · 17 min
【Golang】go:embedを用いて格言表示コマンド(subaru)を開発

【Golang】go:embedを用いて格言表示コマンド(subaru)を開発

前書き:go:embedを試したかった Golangでは、go:embedがVersion1.16から組み込まれています。 go:embedの利点は、「バイナリインストール(設定ファイルや関連ファイル含む)がより簡単になる事」でしょうか。go:embedを用いる事によって、バイナリの中に設定ファイルやスクリプトなどを埋め込めます。そのため、バイナリをシステムに置くだけで、インストール作業が完了となります。 ...

February 5, 2022 · 6 min
【解決方法】You don't have write permissions for the /var/lib/gems/2.7.0 directory【Ruby, Linux】

【解決方法】You don't have write permissions for the /var/lib/gems/2.7.0 directory【Ruby, Linux】

前書き:gem installでコケる 原因は単なる権限の問題。Ruby初心者なので自分用にメモします。 まずは、前提情報です。Ubuntu 21.10、Ruby 2.7.4[x86_64-linux-gnu]で、femパッケージ(パッケージ作成ツール)のインストールを試みました。結果は、/var/lib/gems以下のパーミッションエラー。 ...

February 5, 2022 · 4 min
【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】

【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】

前書き:プロジェクトを新規で作るのはダルい Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ(誤記、typo)が発生しがちです。 ...

January 11, 2022 · 4 min
【Vala言語】優れた点、Linuxにおける立ち位置、物足りなさとその対策(coreライブラリ開発)

【Vala言語】優れた点、Linuxにおける立ち位置、物足りなさとその対策(coreライブラリ開発)

マイナーなプログラミング言語:Vala言語とは あなたはVala言語をご存知でしょうか? Vala言語は、プログラミング言語ランキングでは圏外(50位以下)であり、クロスプラットホーム言語にも関わらずLinux環境のGUIプログラミングでしか用いられる機会がありません。GUIに強みを持つ言語であるため、Linuxでシステムプログラミング開発する人でも、Vala言語の存在を知らない可能性があります。THE マイナー言語。 ...

January 5, 2022 · 7 min
Software Design 2022年1月号 第2特集(第1章、第2章)に寄稿【キッカケ、感想、書き足りない内容】

Software Design 2022年1月号 第2特集(第1章、第2章)に寄稿【キッカケ、感想、書き足りない内容】

前書き:人生初!ソフト雑誌への寄稿 技術評論社のSoftware Design 2022年1月号 第2特集(第1章、第2章)に寄稿させていただきました。 間違いなく、2021年で最も嬉しい出来事です!(エンジニア人生の中でトップクラスの嬉しさ) ...

December 17, 2021 · 8 min
【golang】errorsパッケージ New(), Unwrap(), Is(), As()の使い方と注意点

【golang】errorsパッケージ New(), Unwrap(), Is(), As()の使い方と注意点

前書き:君、err != nilしかできないの? Golangでは、errorがnilでなければ上位関数にそのままerrorを戻す処理が頻繁にあります。 f, err := os.Create(path) if err != nil { return err } 「エラーが発生した事実」を上位関数へ伝えるだけであれば、上記コードの対応で問題ありません。しかし、エラーの種類によって異なる対応をしたい場合は、nilチェックだけでは物足りません。 ...

December 13, 2021 · 12 min
「Log4j2の脆弱性から垣間見えたOSS開発の厳しさ」と「OSS開発者に投げ銭する文化(未来)」について

「Log4j2の脆弱性から垣間見えたOSS開発の厳しさ」と「OSS開発者に投げ銭する文化(未来)」について

前書き:災害レベルの脆弱性 本記事は、紛うことなきポエム記事です。Log4j2の脆弱性問題を追っている間に「OSS開発の醜い部分」を目の当たりにしたので、本記事では「せめてOSS開発者が金銭的もしくは他の手段で報われればいいのに」と主張します。 ...

December 12, 2021 · 6 min
MimixBox(BusyBoxインスパイア)の概要、開発時の気づき、PR募集について【Golang学習】

MimixBox(BusyBoxインスパイア)の概要、開発時の気づき、PR募集について【Golang学習】

MimixBoxはGolang学習用アプリとして開始 Golang製のMimixBoxは、BusyBox(多数のUnixコマンドをシングルバイナリに詰め込んだCLIアプリ)と共通点を持ちつつ、独自の目標を持つCLIアプリとして開発しています。 開発のキッカケは、Golangを学習するためです。前職を退職して、新しい会社では開発経験のないGolangがメイン言語となりました。即戦力となれるよう、私は勉強のためにCLIツールや独自シェルを作り始めましたが、「全部混ぜて開発すればプロジェクト数が増えず、管理が楽では?それなら、BusyBoxを真似するか」という考えに至りました。 ここまで来れば「MimixBox - Mimic BusyBox on Linux(Linux上でBusyBoxを模倣する)」という名称を考えつくのは、一瞬でした。ちなみに、同様のプロジェクトにはtoyboxとgoboxがあります(皆、考える事は大体一緒)。 ...

November 28, 2021 · 9 min
【OS/Linux系多め】組み込みエンジニア時代(7年間)に役立った良書9選

【OS/Linux系多め】組み込みエンジニア時代(7年間)に役立った良書9選

前書き:技術レイヤーが変わる前に振り返り 2021年12月に新卒入社した会社を退職しました。 退職前の会社では、組み込みエンジニアとして働いていましたが、次の職場ではバックエンドエンジニアとして働きます。組み込みエンジニアは、ハード(機密情報)と近い関係からか、あまり情報発信しない印象があります。情報発信しようにも、「会社独自技術のネタしか無い」という業界な気がしています。 ...

November 23, 2021 · 10 min
Golangで無名パイプからデータを受け取る方法【term.IsTerminalによる判定】

Golangで無名パイプからデータを受け取る方法【term.IsTerminalによる判定】

前書き:os.Args[1]にはパイプのデータがない 無名パイプは、Terminal上で用いる"|“の事です。例えば、以下の例ではechoコマンドがパイプで"PIPE test"を渡し、受け取り側のcatコマンドがパイプから受け取ったデータを標準出力しています。 ...

November 23, 2021 · 3 min
【C言語】完全なオブジェクト指向ではなく、Interfaceのみを利用する選択【Golangを参考に】

【C言語】完全なオブジェクト指向ではなく、Interfaceのみを利用する選択【Golangを参考に】

C言語とオブジェクト指向は相性悪い オブジェクト指向は、C言語でも実現できます。 C言語は、言語によるオブジェクト指向プログラミングのサポートがありません。しかし、開発者が注意深く実装する事によって、オブジェクト指向プログラミングが可能です。 ...

November 17, 2021 · 5 min
shc(Shell Script Compiler)でスクリプトをバイナリ化(暗号化)する方法

shc(Shell Script Compiler)でスクリプトをバイナリ化(暗号化)する方法

前書き:Shell Scriptの中身を見せたくない 通常の開発業務では、Shell Scriptをバイナリ化(かつ暗号化)する利点はありません。自分しか解読できないShell Scriptは、他のチームメンバにとっては迷惑な存在(負債)になります。 ...

August 29, 2021 · 4 min
Shell Scriptにバイナリ(例:tarball)を埋め込み、実行時にバイナリを取り出す方法

Shell Scriptにバイナリ(例:tarball)を埋め込み、実行時にバイナリを取り出す方法

前書き:スクリプトサイズが大きい理由 プロプラエタリソフト(例:商用ソフト)のShell Scriptインストーラのサイズを見たら、数百MBだった事はありませんか? そのような場合は、.deb/.rpmパッケージやtarball等のバイナリがShell Scriptに埋め込まれている可能性が高いです。このようなインストーラは、実行時にバイナリ部分だけを取り出してから、バイナリを操作します。 ...

August 29, 2021 · 5 min
Ubuntu (20.04)へsshログインした際に表示されるWelcomeメッセージの仕組みと表示しない方法

Ubuntu (20.04)へsshログインした際に表示されるWelcomeメッセージの仕組みと表示しない方法

前書き:UbuntuはWelcomeメッセージが立派で邪魔 ラズパイサーバ(Raspberry Pi OS)からHP小型PC(Ubuntu 20.04)にサーバ移行した時、UbuntuのWelcomeメッセージがラズパイより立派な事に気づきました。 例えば、Ubuntuにsshログインした時、以下のようなWelcomeメッセージが出ます。 ...

August 14, 2021 · 7 min
【Java】immutable object(不変クラス)の利点/欠点/作成方法および不変クラスで実装する場面

【Java】immutable object(不変クラス)の利点/欠点/作成方法および不変クラスで実装する場面

前書き:これだからC言語プログラマは…… Immutable object(不変クラス)とは、コンストラクタによるインスタンス生成時から状態(フィールド変数の値)が変わらないクラスを意味します。代表例はStringクラス。 ...

May 23, 2021 · 5 min
【オススメ】ソフト開発/エンタメ(余暇)で使用するLinuxアプリ【Debian/elementary OS】

【オススメ】ソフト開発/エンタメ(余暇)で使用するLinuxアプリ【Debian/elementary OS】

前書き:オススメ?当たり前? 本記事は、読者の皆様にLinuxアプリをオススメするように見せかけた備忘録記事です。 私は、2018年から開発環境(≒普段使いのPC)をMacからLinuxに移行しました。Linux環境に移行した後もDebian → elementary OSと移行を続けていて、開発や余暇で使用するアプリを記録しておく必要性が出てきました。 ...

May 22, 2021 · 7 min
【C/C++/C#/Java対応】循環的複雑度の計測ツール lizardの導入方法【Swift/Rust/GoもOK】

【C/C++/C#/Java対応】循環的複雑度の計測ツール lizardの導入方法【Swift/Rust/GoもOK】

前書き:ネストの深さを指摘する時間が勿体無い コードレビューを効果的に実施したいと考えた事はありませんか? 例えば、短い期間でソフト開発する場合、レビュー時間を潤沢に取れないケースがあります。このような場合は、 ...

May 19, 2021 · 7 min
【可読性向上】java.utils.Objects.isNull()によるnullチェック【関数型プログラミングに便利】

【可読性向上】java.utils.Objects.isNull()によるnullチェック【関数型プログラミングに便利】

前書き:"==“や”!=“による判定と何が違う? Javaでコードを書くと、nullチェック(NullPointerException防止)は避けられません。 私のようにC言語脳の人は、"=="(等価演算子)や”!="(不等価演算子)を用いてnullチェックを行うかもしれません。しかし、Java SE8以降は、null関係の判定メソッドとしてjava.utils.ObjectsにisNull()やnonNull()が用意されています。 ...

May 17, 2021 · 5 min
【Abstract Factoryパターン】コンポジットの部品変更を容易にするデザインパターン【コード例:Java】

【Abstract Factoryパターン】コンポジットの部品変更を容易にするデザインパターン【コード例:Java】

前書き:Abstract Factoryパターンとは Abstract Factoryパターンは、関連するインスタンスの生成APIを抽象化クラスに集約し(= 生成に関するインターフェースを定義し)、生成処理は抽象化クラスを継承(実装)したクラスに任せる設計手法です。 ...

May 15, 2021 · 6 min
【C言語】_Generic(C11、gcc4.6以降)または__attribute__((overloadable))によるオーバーロード

【C言語】_Generic(C11、gcc4.6以降)または__attribute__((overloadable))によるオーバーロード

前書き C言語にはオーバーロードがない。そんな風に考えていた時期が私にもありました。 オーバーロードとは、メソッド(関数)を多重定義する言語仕様です。例えば、Javaでは引数の順番もしくは引数の個数を変える事によって同名メソッドを複数定義できます。 ...

May 15, 2021 · 4 min
【Java】enum(列挙子)の持つメソッド、基本的な使い方、応用(シングルトン)【実装例付き】

【Java】enum(列挙子)の持つメソッド、基本的な使い方、応用(シングルトン)【実装例付き】

前書き:君、C言語のenumと雰囲気違うね 仕事でJavaのコードを読んでいる時、「Javaのenumは、C言語のenumより多機能だな」と感じる場面がありました。 Javaのenumを多機能と感じた例として、以下の3点が挙げられます。 ...

February 21, 2021 · 7 min
【Androidアプリ】コードリーディングに使うアプリをUserLAndからSource Code Viewer Proに浮気した話

【Androidアプリ】コードリーディングに使うアプリをUserLAndからSource Code Viewer Proに浮気した話

前書き:UserLAndは遅かった 約2年前の2019年、私はAndroidスマホでコードリーディングするにはUserLAndが最適だと結論づけていました。 しかし、使い込んでいく内にUserLAnd特有の**「ファイル操作が遅い点」**に我慢できなくなりました。 システムコール単位でフック処理を入れているUserLAndは、ミドルレンジスマホがCeleron PCと同等に感じられるぐらい遅いです。特に、パッケージマネージャによるインストール処理などの待ち時間は長く、下手すると数十分から数時間待たされます。 ...

February 20, 2021 · 5 min
【Java】Serializableの実装、役割、使い方、危険性とその対策【serialVersionUIDとは】

【Java】Serializableの実装、役割、使い方、危険性とその対策【serialVersionUIDとは】

前書き: Javaの勉強中に見つけたSerializable 2021年になってから、腰を据えてJavaの勉強を始めました。 今年はJavaを後輩に教える機会があり、自分もJava歴が短くて手探り感がある。勉強が必要だ。 JavaのOSS(小規模)を読みたいが、何か良いものはないかなー。以前、「Apacheのコードを読もう!」と考えた時期があった記憶もある。が、もう少し小規模なプロジェクトから始めたい。 — Nao03@疲れて会話がUDP (@ARC_AED) February 7, 2021 私はJava学習の一環としてJava Core APIのソースコードを読んでおり、その際にjava.io.FileクラスでSerializableインターフェースをimplementsしている記述を見かけました。 ...

February 20, 2021 · 7 min