NPMについて(まとめ)

NPMについて

NPMとは何か

  • JavaScript開発者間でライブラリを共有するためのプラットフォーム
  • Node.jsをインストールすればついてくる。
    • コンソールでnpmコマンドを用いて利用する。

NPMで出来ること

  • JSのライブラリをプロジェクトディレクトリにインストール・管理する
  • 自作したライブラリをnpmを通じて公開することができる
  • ライブラリのバージョンや、依存関係などを細かく制御できる
  • 開発環境と本番環境を分けて環境を構築できる

パッケージのバージョンについて

  • NPM ではパッケージのバージョン管理にセマンティック・バージョニングを用いている。
  • パッケージのバージョンは X.Y.Z のようにドットで区切られ、それぞれメジャー.マイナー.パッチと呼ぶ。

例えば

HelloWorld パッケージ(ver 1.0.0)があり、Helloクラスが定義されていると仮定すると、以下のようにバージョンが変わっていく。

  1. Hello のあるメソッドの不具合を修正した >>> 1.0.1
  2. Hello のメソッドを追加した >>> 1.1.0
  3. Hello の仕様を変更した >>> 2.0.0

この内の3つめは利用者側にとって意図しない挙動を発生させる可能性があるため、基本的にはnpmでインストールを行うとpackage.jsonのバージョンにハット付きでインストールされる。

これはメジャーバージョンは固定するが、パッチとマイナーバージョンの更新は許容するといった意味になる。

NPMの使い方

パッケージのインストール

NPM公式ドキュメント より一部抜粋

  • npm install packageName

    • -P | --save-prod
      • インストール時なにもオプションを指定しない場合もこの方法が使われる
      • package in dependencies
    • -D | --save-dev
      • 開発向けパッケージのインストール時に用いる。(リリース時に不要なものはこちらへ)
      • package in devDependencies
    • -O | --save-optional
      • 環境に依存するパッケージはこちらへ。(Macのみなど)
      • package in optionalDependencies
    • --no-save
      • その場のみ利用する場合はこちら。package.jsonへ追加しない
      • Prevents saving to dependencies
    • -E | --save-exact
      • 最新のパッケージをインストールし、その後は更新しない場合はこちら。
    • -B | --save-bundle
      • つかいかたわからない
      • bundleDependenciesに記載される
    • --only={prod[uction] | dev[elopment]}
      • 開発・本番環境を切り替えてパッケージのインストールを行う場合に用いるコマンド。(重要)
      • --only=prod
        • dependencies のみインストール
      • --only=dev
        • devDependencies のみインストール
    • packageName@x.y.z
      • packageNameのバージョンを指定してインストール(更新しない)
    • -g | --global
      • グローバルインストール
      • どのディレクトリからも利用可能。
    • @
      • パッケージのバージョンを範囲を満たす形でインストールする。
      • packageName@">=0.1.0 <0.2.0"
      • マイナーバージョンの1 以上 2 未満の場合
  • パッケージのアンインストール

    • uninstallはr,remove,rm,un,unlink
  • npm config

    • デフォルトの挙動を変更する場合に用いる。(全てのパッケージのインストールに更新しない設定を用いるなど)
    • set
      • save-prefix="~"
        • パッチバージョンのみ更新を許可する
      • save-exact true
        • バージョンを固定する。更新を許可しない。

Remlinリリースしました

おひさしぶりです。

前回、記事を定期的に書こうよって言っておきながら、間が空いてしまいました。トホホ

 

10/27, 28 は神戸電子専門学校の学園祭でした。

そこで Remlin という、まぁIoTデバイスといえばそうなのか?みたいな物を売っていました。(1台1500円.笑)

リリースするにあたって, iOS, Android用のスマホアプリ「Remlin」(同じ名前...)も開発し、バックエンドとしてHerokuにNode.jsを立ち上げたりしました。

結論: けっこう大変だった。

 

9月にプロトタイプのバージョン1が出来上がり、いい感じでしたが、

HTTPSを投げまくるIoTデバイスってどうよ?という疑問からMQTTしか

扱わないように仕様変更しよう。という話になりました。

 

1ヶ月あれば余裕っすね

 

そう思ってました。 が、、

デスマーチでした😄

 

スマホアプリはReactNative, バックエンドもNode.js だったこともあって

開発コストはそこまで重くない&ある程度の想像がつく、との考えから

導き出された工程は、マネジメント経験の浅い自分にとってはハードルが高かった笑

(いい勉強になりましたが)

 

結局、ハードウェアの方にもバグが残ってたり、アプリにも変な挙動があったりしたので、回収=>後日お渡し、の流れで今も追われてます笑

 

ポツポツと

2回目の記事の投稿です。

 

前回の投稿から2ヶ月間が経ちましたね。「書こう」と思わないと書かないということだと、どうも継続性が見込めない。ということは、「◯日に1回書く」という制約によって絞り出す感じの方がいいのかもしれない。

 

投稿する目的も<暇つぶし>なのか<アフィリエイト>なのかによるよね。

昔、マインクラフトが流行った時期に、海外のMODやツールの解説・利用例なんかを乗せたらひと月当たり300人くらいのアクセスがあったから、流行りに乗せて、ランキング上位を狙うのもありかもしれない。

 

そういえば最近、Ingressを始めました。(今更...

半年で6kg重くなったので体が、さすがにこのままはヤバイと思って試しに遊んでみると意外と楽しかった。

移動圏が田舎,都市部と往復するので、都市部でアイテムを稼いで田舎で経験値を稼ぐ感じ。

エリアボスと呼ばれる猛者が何名か周りにいるので、ビクビクしながら攻略してます。

 

とまあ、近状はこんな感じで。あと半年で学生は終わり。そのあとは忙し慌しで働くだろうから、今のうちに「やっておいたほうが良い」ことを消化したいね。

・語学(英語)

・健康な体作り

・技術習得

・資格取得 など

Hello, world!

Hello, world!

ということで、ブログ開設しました。

記事の種類は、自分用覚書、IT技術関連、その他諸々といったところでしょうか。

気まぐれでぼちぼち書いていきまーす

 

開発中のアプリやサービスの告知や、コメントもこちらで扱いたいと思います。