hAcKTion

日々のアウトプット場所。

チェックデジットを求めるプログラムを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

www.npmjs.com

おおおー!公開された!なんか嬉しい。 というわけで、一応テストも書いて動いていると思うので、チェックデジットを何故かjsで求めるハメになってしまった方は使ってみてください、

今回、こちらの記事を参考にしました。

qiita.com

JANコードのチェックデジットを求めるプログラムのテストを書いて思ったこと

昨日作ったJANコードチェックデジットを求めるプログラムにテストを追加した。

github.com

1つ目に思った事は、 calcJanCodeCheckDigit()getCheckDigit() が、実質同じテスト内容になってしまい、どっちか要らないんじゃないか...という気持ちになっている事です。

意図としては、 getCheckDigit() でも、 addCheckDigit() でも、同じチェックデジットの求める処理を使うということなのですが、もうちょっと分け方を工夫できたのではないかと思ったりもします。

2つ目に思った事は、 エラー処理の条件や、正常処理の条件・組み合わせをテスト側で予め考えて書いておくと、実装ミスが少なくなりそうという事です。 昨日のエントリの実装ミスは、テストを書いて初めて気づきました。

hacktion.hateblo.jp

今までは、実装書いてコミットしてから、テストをコミットする。という方が見やすいかなと思っていましたが、
いちいち書いている関数を実行するより、テストを実行したらすぐコケてくれるし、
どういう結果を期待して実装しているのかがわかりやすいと思うので、
実装とテストはセットでやって行こうと思った次第でした。

NaNをチェックするのはisNaN()なんです

ナンを食べたい気分ナンです。(挨拶)

チェックデジットを求める時の引数について、 0始まりの数値もありえるので string型にしていました。 そのため、引数チェックで、以下のようなチェックを入れていました。

Number(codeWithoutDigit) === NaN

しかし、テストを書いている時に、これがうまくひっかかっていませんでした。

仕様がMDNにありました。

developer.mozilla.org

なので、以下のように修正しました。

isNaN(Number(codeWithoutDigit))

NaN を使うことは稀と、MDNも書いてるっぽいので、プログラムに改善の余地がありそう・・・と思わされました。。。

JANコードのチェックデジットを求めるプログラムを作る

少し前にJANコードチェックデジットの仕様を調査していました。

hacktion.hateblo.jp

今日は、この仕様をプログラムに落とし込みました。

github.com

偶数桁の数字、奇数桁の数字のそれぞれについて、和を求めるために、まず文字列を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が上がっていたので少しみてみようと思ったけど、差分をどうやって吸収するのか少し迷ってしまいました。

情報を探していたら公式がきちんとドキュメントを用意してくれていたのを発見しました。

docs.github.com

ここの、「フォークにリモートを設定する」を行い、「フォークを同期する」を行えば、迷ってた事は解消できました。

$ git remote add upstream [ORIGINAL Repos URL]
$ git fetch upstream
$ git checkout development
$ git merge upstream/development

※開発者の基底ブランチがdevelopment

ちなみに、後で気づいたんですが、GitHub上は勝手に追従している・・・?
ということは、originからfetchしてきてmergeすればよかっただけ・・・?

・・・悲しい。

チェックデジットの仕様を把握する

JANコードチェックデジットをTypeScriptで求めるというのを作ってみようと思う。

本当はサーバサイドで計算した結果を返してもらえると嬉しいんだけども、そういう訳にはいかない事もあるようなので、ライブラリ的に作る事を目標とします。

ちなみに、npmのパッケージとして公開するところまでやってみる事ができればなと思って、昨日はstarterを作ってみた。

hacktion.hateblo.jp

求める方法を探したところ、こちらに計算方法が載っていた。

www.dsri.jp

おおお、これは面倒臭い...。

というわけで、リポジトリを作るところまで今日はやって、明日少し着手する。

github.com

TypeScriptでコードを書くためだけのstarter

JANコードチェックデジットを求めるプログラムを書こうと思い、どうせなら自分がいつでも使えるようにライブラリっぽくしておこうと考えた。
で、環境を作っていくんですが、アプリケーション以外作った事がないという悲しい現実からおさらばするために、
とりあえず、最低限必要になりそうな、TypeScriptで書いたコードをコンパイルするためだけのstarterを作ってみた。

github.com

明日からチェックデジットを求めるプログラムを書いていきます。