チェックデジットを求めるプログラムをnpmに公開してみた
最近作っていたチェックデジットを求めるプログラムをnpmに公開してみました。
結構簡単にできたので、内容をメモします。
1. npmユーザーの作成/ログイン
以下のコマンドで簡単に作成できます
$ npm set init.author.name "some name" $ npm set init.author.email "some email" $ npm set init.author.url "some url" $ npm adduser (usernameを入力) (passwordを入力) (Emaill<公開されるメールアドレス>を入力)
作成したら、最後のEmailで入力したメールアドレスに認証のメールが飛ぶので、認証しておきます。
※認証されていないとパッケージ公開ができません
2. 公開するパッケージのリポジトリにtagを切る
git tag -a v0.1.0 -m "First version v0.1.0" git push origin tags/v0.1.0
3. npm公開!
npm publish ./
すると
npm notice npm notice 📦 js-jan-code-check-digit-calculator@0.1.0 npm notice === Tarball Contents === npm notice 2.4kB dist/calcJanCodeCheckDigit.js npm notice 4.5kB dist/calcJanCodeCheckDigit.test.js npm notice 421B dist/index.js npm notice 870B package.json npm notice 386B README.md npm notice 944B dist/calcJanCodeCheckDigit.d.ts npm notice 11B dist/calcJanCodeCheckDigit.test.d.ts npm notice 72B dist/index.d.ts npm notice 1.1kB LICENSE.txt npm notice === Tarball Details === npm notice name: js-jan-code-check-digit-calculator npm notice version: 0.1.0 npm notice package size: 2.9 kB npm notice unpacked size: 10.7 kB npm notice shasum: npm notice integrity: npm notice total files: 9 npm notice + js-jan-code-check-digit-calculator@0.1.0
おおおー!公開された!なんか嬉しい。 というわけで、一応テストも書いて動いていると思うので、チェックデジットを何故かjsで求めるハメになってしまった方は使ってみてください、
今回、こちらの記事を参考にしました。
JANコードのチェックデジットを求めるプログラムのテストを書いて思ったこと
昨日作ったJANコードのチェックデジットを求めるプログラムにテストを追加した。
1つ目に思った事は、 calcJanCodeCheckDigit()
と getCheckDigit()
が、実質同じテスト内容になってしまい、どっちか要らないんじゃないか...という気持ちになっている事です。
意図としては、 getCheckDigit()
でも、 addCheckDigit()
でも、同じチェックデジットの求める処理を使うということなのですが、もうちょっと分け方を工夫できたのではないかと思ったりもします。
2つ目に思った事は、 エラー処理の条件や、正常処理の条件・組み合わせをテスト側で予め考えて書いておくと、実装ミスが少なくなりそうという事です。 昨日のエントリの実装ミスは、テストを書いて初めて気づきました。
今までは、実装書いてコミットしてから、テストをコミットする。という方が見やすいかなと思っていましたが、
いちいち書いている関数を実行するより、テストを実行したらすぐコケてくれるし、
どういう結果を期待して実装しているのかがわかりやすいと思うので、
実装とテストはセットでやって行こうと思った次第でした。
NaNをチェックするのはisNaN()なんです
ナンを食べたい気分ナンです。(挨拶)
チェックデジットを求める時の引数について、 0
始まりの数値もありえるので string型にしていました。
そのため、引数チェックで、以下のようなチェックを入れていました。
Number(codeWithoutDigit) === NaN
しかし、テストを書いている時に、これがうまくひっかかっていませんでした。
仕様がMDNにありました。
なので、以下のように修正しました。
isNaN(Number(codeWithoutDigit))
NaN
を使うことは稀と、MDNも書いてるっぽいので、プログラムに改善の余地がありそう・・・と思わされました。。。
JANコードのチェックデジットを求めるプログラムを作る
少し前にJANコードのチェックデジットの仕様を調査していました。
今日は、この仕様をプログラムに落とし込みました。
偶数桁の数字、奇数桁の数字のそれぞれについて、和を求めるために、まず文字列を1文字ずつ配列に入れます。 計算を行うために、数値に変換しています。
const codeWithoutDigitArray = codeWithoutDigit.split("").map(Number);
それぞれの和を求める部分は以下のようにしました。
codeWithoutDigitArray.forEach((number, index) => { if ((index + 1) % 2 === 1) { sumEvenDigitArray += number; } else { sumOddDigitArray += number; } });
forEach()以外で方法ないかなと思ったのですが、思い付かず、一番シンプルに書くとこうなのかなと思いました。
下一桁の計算は %
剰余演算子を使って求めます。
// 下一桁を10から減算したものがチェックデジット return (10 - includeCheckDigitValue % 10).toString();
最後に文字列にしているのは、JANコードの12桁にくっつける文字列操作を行う必要があるためです。
明日はテストを書いていこうと思います。
forkしてきたリポジトリについてローカル上でリモートを設定する
covid-19のOSSにちょっとだけコントリビュートしたっきり、あまり動きがなさそう?だったのもあり、
forkしてきたリポジトリが少し放置状態となっていました。
issueが上がっていたので少しみてみようと思ったけど、差分をどうやって吸収するのか少し迷ってしまいました。
情報を探していたら公式がきちんとドキュメントを用意してくれていたのを発見しました。
ここの、「フォークにリモートを設定する」を行い、「フォークを同期する」を行えば、迷ってた事は解消できました。
$ git remote add upstream [ORIGINAL Repos URL] $ git fetch upstream $ git checkout development $ git merge upstream/development
※開発者の基底ブランチがdevelopment
ちなみに、後で気づいたんですが、GitHub上は勝手に追従している・・・?
ということは、originからfetchしてきてmergeすればよかっただけ・・・?
・・・悲しい。