素人でもできるWindowsでのNemの開発!!エラーとかけっこうでたけど頑張った!その2 ~Node.jsをサーバに公開してサービスを提供する方法~
こんにちは!病み病みサラリーマンです。
前回に続いて、WindowsでNEMのアプリ開発に書きます。
前回はローカル環境でNEMのアプリケーションを動かすところを記載しましたが、ローカル環境で動かすことができたら、ホームページみたいに一般に公開したいと思うようになると思います。
でも、単純なHTMLじゃないし、Node.jsで作成したアプリを一般公開できるのかは気になるところだと思います。
結論から言うとできます。しかも無料で!!!
なんで、今回は簡単はNode.jsアプリを一般公開するとこまでを記載します。
- 1.公開するための簡単なNode.jsアプリケーションを作成する
- 2.Herokuへの登録
- 3.Heroku Toolbeltのインストール
- 4.Heroku登録に必要な設定ファイル作成(package.jsonとProcfile)
- 5.gitを使ってHerokuへのアプリのデプロイ
- 6.動作確認
1.公開するための簡単なNode.jsアプリケーションを作成する
まず、作成するアプリケーションはめっちゃ簡単なアプリケーションにします。
URLを実行すると「Hello World」と表示されるだけのアプリケーションです。
ソースは下記のような感じです。
var http = require('http');//①「http」関連の必要なオブジェクトの作成 var server = http.createServer();//②httpオブジェクトからserverオブジェクトの作成 server.on('request', doRequest);//③指定のイベント処理を組込む。第一引数にイベント名、第二引数に組込む処理(関数)を記載 server.listen(1234); //server.listen(process.env.PORT, process.env.IP);//④serverを待受け状態にして、クライアントからリクエストがあった場合に処理をする状態にする。第一引数はポート、第二引数はホスト名(IP) console.log('Server running!'); // リクエストの処理 function doRequest(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World\n'); res.end(); }
上記ソースを適当なファイル名で適当なフォルダに配置して、実行してみましょう。
私の場合は下記のフォルダに配置してます。
C:\Users\XXX\Desktop\nem-library-sample\node-sample\sampleapp.js
上記フォルダに移動して、コマンドプロンプトから下記コマンドでアプリケーションを実行してみます。
node sampleapp.js
コマンドプロンプトに「Server running!」と表示されたら成功です。
次に、ブラウザから下記URLを実行してください。ローカルで作成したアプリケーションが実行され、ブラウザに「Hello World」と表示されたら成功です。
http://localhost:1234/
ここまでできたら、このローカルで動かしたアプリケーションを一般公開させるために、Herokuというサービスへデプロイ(プログラムの配置)を行います。
2.Herokuへの登録
上記で作成したアプリケーションを実行してくれる一般公開されているサーバにこのモジュールをデプロイ、つまりプログラムの配置を行う必要があります。
ホームページを作成したことがある人ならレンタルサーバにHTMLファイルを配置するのと同じというとイメージがつきやすいかもしれないです。
HTMLの場合は、レンタルサーバでよいですがNode.jsの場合は、Node.jsを実行してくれるサービスへ配置を行う必要があります。
このNode.jsを実行してくれるサービスの1つがHerokuです。海外のサイトですが、多数の日本語の記事もあり、かつ登録や利用方法も簡単なので
使いやすいです。
では、早速登録してみましょう。
下記URLからHEROKUの公式サイトに移動します。
id.heroku.com
まず、トップページからSign Upをクリックします。
下記を参考に登録します。名前は自分の名前を入力してください。
登録すると、登録したメールアドレスにメールが届くので、そこからパスワード設定をしてください。
パスワード設定が完了したら、下記画面が表示されますので、下記をクリックしてください。
下記をクリックして、アプリ作成画面に遷移します。
アプリ名を入力して、準備完了です。
これでHerokuへの登録は完了です。
3.Heroku Toolbeltのインストール
次に、ツールのインストールです。
Herokuに登録する際のgit関係のツール等がインストールされます。
Windowsのインストールなので、下記をクリックして(私のPCの場合は64bitですが、OSに合わせて適宜32bitか64bitを選択してください)、あとはデフォルト設定で進めばインストール完了です。
4.Heroku登録に必要な設定ファイル作成(package.jsonとProcfile)
Herokuの登録には下記の2ファイルが必要です。
package.json … アプリケーションに必要な情報が記載してあるファイル
Procfile …Herokuで実行するコマンドが書いてあるファイル
ちなみに、package.jsonはnpm installとコマンドプロンプトで実行すると、必要情報を聞かれるので入力すればできあがります。
直接、ファイルを記載してももちろんOKです。
package.jsonファイルは下記な感じ
{ "name": "sampleapp-bakeneko", "version": "1.0.0", "description": "display Hello world!!", "main": "sampleapp.js", "scripts": { "start": "node sampleapp.js" }, "engines": { "node": "6.2.2" }, "author": "bakeneko", "license": "ISC" }
Procfileファイルは下記な感じ
web: node sampleapp.js
5.gitを使ってHerokuへのアプリのデプロイ
ついに、Herokuへのアプリのデプロイです。
ここで、コマンドプロンプトからherokuコマンドを実行できるようにpathを通しておいてください。
システム環境変数のpathにherokuをインストールしたbinのパスを登録します。
私なら、下記になります。
C:\Program Files\Heroku\bin
まずは、コマンドプロンプトから下記を実行しherokuへログインします。
heroku login
メールアドレスとパスワードを聞かれるので入力して、ログインしてください。
次にアプリ作成したフォルダの下にいき、下記コマンドを実行してください。
heroku createで新規のアプリケーションをherokuに登録します。
ここで、既存で使われているアプリケーション名は使用できないので、「 ! Name is already taken」とかのエラーがでたら、名前を変えて登録してみてください。
cd C:\Users\XXX\Desktop\nem-library-sample\node-sample git init heroku create sampleapp
次に、作成したnode-sampleフォルダ配下のファイルを全て、Herokuに登録します。
git add .
コミットを打つ前に下記でメールアドレスと、名前を登録しましょう。
下記コマンドの""の部分は自分のメールアドレスとユーザネームに変更してください。
git config --global user.email "you@example.com" git config --global user.name "Your Name"
上記を登録しないと、下記のコメントがでてコミットができません。
Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository.
そして、コミットします。コミット事にわかりやすいコメントを記載してください。
git commit -m "first git sample node.js"
ついに、下記コマンドでHerokuへ登録されます。
git push heroku master
6.動作確認
上記ができたら、下記のダッシュボードから登録したアプリを選択します。
https://dashboard.heroku.com/apps
上記遷移先の右上にある「Open app」のボタンを押下すると、自分が作成したアプリケーションが呼ばれ、別ウィンドウが開いて「Hell World」が表示されるはずです。
かなり、長かったですがこれでNode.jsで作成したアプリを一般公開することができました。
これで、NEMのアプリを一般公開できますね。
次は、ついにNEMのアプリケーション(かなりしょぼいアプリになると思う)を一般公開してみるぞ!!
素人でもできるWindowsでのNemの開発!!エラーとかけっこうでたけど頑張った!その1
こんにちは!病み病みサラリーマンです。
最近流行りの仮想通貨!!特に私はNEM(ネム)に興味があります。
NEMってのは仮想通貨XEM(ゼム)を発行しているプロジェクト名です。
ビットコインとかイーサリアムとか色々な仮想通貨がある中で、私がこのNEMに注目している理由の一つがアプリケーションを作成するのが簡単ということです。簡単??ってことは、俺にもできるか!!
と思い立ち、ちょっとやってみました。。。
けど、Node.jsとか使ったことないし、なんかサイトと同じようにやったけどエラーでるし、、そもそも、俺のパソコンWindowsだし。。。
と少しくじけそうになりましたが、なんとかサイト通りの出力がでるようになったので、そこまで躓いた軌跡をここに記します。
きっと、同じように躓いた人もいるはず!!
目標は下記のサイトに載っている通りに出力がだせること。ってこれだけでも素人、少なくとも私は躓きました。
これはNEMのテストネットワーク(XEMとかをやり取りする本当のネットワークではない!)で残高照会を表示するプログラムのようです。
【初心者向け】NEM LibraryとJavaScriptを使った開発にちょっとだけ入門してみる - Qiita
1.まずはNode.jsが動く環境を準備しよう!!!
NEMの開発って言ったのにいきなりNode.js??って感じなんですけど、NEMの開発を行う際には、このNode.jsってのを動かせる環境を作らなくちゃならいんです。色々なサイトには、そこの最初の部分が書かれてないから、どうやって動かすのか?って迷うと思うんですけど、まずはこの環境を用意する必要があります。
手順は2つです。
1.1Nodistのインストール
上記から下記の部分をクリック!!
NodistってのはNode.jsを動かすプログラムのバージョン変更等を簡単に行えるようなWindows用のソフトです。
このNode.jsを動かすプログラムは頻繁にバージョン変更が行われ、Nemで対応しているバージョンを使うにはバージョンを古くする必要があったりするので
これを入れとくと便利です。
1.2windows-build-tools をインストール
次に、必要なツール類のインストールです。下記のようにPowerShellを管理者権限で起動してください。
そして、下記コマンドを実行するとインストール完了です。
npm install -g --production windows-build-tools
ここまでできたら、コマンドプロンプトを起動して、「node -v」と打ってみましょう。
v6.2.2とかバージョン情報が出力されたらインストールは成功してます。
2.Node.jsでHello Worldを出力だ!!!
次に、適当なところに適当なフォルダを作成します。
例えば下記のようにデスクトップの下に、nem-library-sampleファルダを作成します。
C:\Users\XXX\Desktop\nem-library-sample
このsampleファルダの下にhello.jsというファイル名でテキストファイルを作成し、そこに下記のプログラムを記載して保存します。
console.log("Hello world!");
下記の通り、Hell world!と出力されたら成功です。
3.必要ツール(yarn、nemライブラリ、babel)のインストール
ここからが、やっとNEM開発の話になります。
下記で、NEM開発に必要なライブラリをインストールしてください。
適当なNEM開発用のフォルダを用意して、そこで下記コマンドを実行してインストールをしてください。
私は、下記フォルダの下で作業をしてます。
C:\Users\XXX\Desktop\nem-library-sample
■yarn…Facebook、Google、Exponent、Tildeによって開発された新しいJavaScriptパッケージマネージャー(npmみたいなもん)
npm install -g yarnをコマンドプロンプトから実行してyarnのインストールを行います。
インストールが完了したら、「yarn -v」でバージョン情報が出力されるか確認してください。
■nemライブラリ…NEMプログラムを動かすのに必要なプログラム群
yarn add nem-library
■bable…Node.jsでまだサポートされていないES6の書き方をNode.jsが理解できる形に変換(トランスパイル)してくれるツール
※URLのサイトでは、上のbabelのインストールコマンドが記載されてなかったので、最初コンパイルでエラーになりました。
babelのインストールなんて開発者の中では当たり前なのでしょうか??
npm install -g babel-cli
yarn add -D babel-cli babel-preset-env
4.javascriptプログラムをbabelで動かす準備
babelでコンパイルするためには下記の2つのファイルが必要です。
■.babelrc
「.babelrc」というファイル名でファイルを作成し、下記を記載します。
{ "presets": ["env"] }
Windowsの場合、「.」から始まるファイル名を作ろうとするとエラーとなりますので、適当なファイル名「PPP」等でファイルを
作成して、コマンドプロンプトから下記コマンドでファイル名を変更してください。
move PPP .babelrc
■package.json
「package.json」というファイル名でファイルを作成し、下記を記載します。
{ "dependencies": { "nem-library": "^0.11.2" }, "scripts": { "build": "babel src -d lib" }, "devDependencies": { "@babel/cli": "^7.0.0-beta.32", "@babel/preset-env": "^7.0.0-beta.32", "babel-preset-env": "^1.6.1" }, "license": "ISC" }
上記はURLのサイトに一番下の "license": "ISC"を足しました。
これは、このあとbabelでコンパイルした際にlicenseがないっていうWARNINGがでたためです。
5.NEMのコード作成と実行
上記で作成したフォルダの下にsrcフォルダを作成して、そこに「index.js」というファイル名で下記のプログラムを記載します。
私の場合は下記となります。
C:\Users\XXX\Desktop\nem-library-sample\src
■index.js
import {AccountHttp, NEMLibrary, NetworkTypes, Address} from "nem-library"; // Initialize NEMLibrary for TEST_NET Network NEMLibrary.bootstrap(NetworkTypes.TEST_NET); const address = new Address("TALICEROONSJCPHC63F52V6FY3SDMSVAEUGHMB7C"); const accountHttp = new AccountHttp(); accountHttp.getFromAddress(address).subscribe(accountInfoWithMetaData => { console.log(accountInfoWithMetaData); });
次に、下記コマンドでプログラムをコンパイルします。
yarn run build
コンパイルすると、下記のWARNINGがでました。
warning You are using Node "7.2.1" which is not supported and may encounter bugs or unexpected behavior. Yarn supports the following semver range: "^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0"
nodeのバージョンが適合していないというワーニングのようです。
なので、コマンドプロンプトから下記コマンドを実行して、nodeのバージョンを変更しました。
nodist + 6.2.2
もう一度、これでコンパイルコマンドをうつとWARNINGなく正常終了します。
コンパイルが成功すると、libフォルダは以下に下記ファイルができてます。
lib/index.js
これを下記コマンドで実行します。
node lib/index.js
すると、下記のような結果が返信されて見事成功となります。
長かった、、、、けっこう、ところどころ苦戦しましたが、なんとかスタートラインに
立てた気がします。
次はもうちょいがんばります!!!!!!
NEMのアプリ作るぞ☆
coincheckで電気の支払い会社変えたらビットコインもらえるようになった!!電気料金や供給サービスは変わらない!!
こんばんは!病み病みサラリーマンです。
今流行りの仮想通貨ですが、ビットコインもイーサリアムもリップルも凄い勢いで値上がりしてますね。
買ってみたいけど、なんか値段の変動が凄すぎて買うのが怖いって人も多いですよね?
私が口座開設している取引所の1つにcoincheckという取引所があります。
出川哲郎さんのCMでおなじみの下記ですね。
この会社ではユニークなサービスを展開してて、家の電気料金の小売り業者を変更するだけで電気料金の
数パーセントのビットコインをもらうことができます。
早速、去年自分もやってみましたが、電気の供給は変わらずに特別なにかするわけでもなく毎月ビットコインが
付与されてます。
1.電気の小売業者の変更って何?なんで小売業者を変更するとビットコインがもらえるの?
2016年に法律が改正され、電力の小売業者が変更されました。
電力って東京電力とか、関西電力とかから買ってるんじゃないの?って思った方、私もそう思ってました。
電気を供給する部門は大きく、発電部門、配送電部門、小売部門の3つの部門からなってますが、
上記の法改正後は上記の小売部門の会社を自由に選択できるようになりました。
東京電力を契約している人は検針票をみると下に、東京電力エナジーパートナーという会社名が入っていると
思います。
この会社をcoincheck指定の株式会社イーネットワークシステムズという会社に変更することで、毎月電気料金の
1%~7%がもらえます。
この小売業者の顧客獲得のためにcoincheck社にいくらかのキャッシュバックが入っているためにビットコインを
顧客に付与しても、儲かる仕組みになっていると思われます。
2.小売業者を変更しても大丈夫なの?
私は去年から、変更を行ってますが、問題なく使用できてますし電気料金も今まで通りです。
3.どうやって登録するの?
まずは、下記からcoincheckのサイトに移動して口座開設を行います。
口座開設が完了した下記のログイン画面から「ウォレット」を選択
下記画面から「でんき」選択
上記画面に申込の詳しい説明があるのでこれに従って申し込めば完了です。
家の電気メーターがスマートメーターじゃない人がほとんどなので、申し込むと1~2週間で東京電力の人が工事にきます。
工事の際は電話で事前に工事の日程連絡がきて、工事は1時間程度で終わります。
簡単なのでぜひやってみてください。
私の場合は電気料金が月1万円程度で4%分のビットコイン付与なので月400円分ぐらいの付与になります。
ビットコインは値上りの可能性もあるので、知らないうちにけっこうなお金が溜まってたりします。
おすすめです!!
副業を初めて会社を辞める準備を始めるぞ。CrowdWorksとかリアルワールドで簡単な開発請負とかやってみたい。まずはrubyで簡単なスクレイピングの練習。
こんにちは。病み病みサラリーマンです。
しばらく、ブログを放置してしまいました。
放置している間、会社を辞めるために何をやる必要があるかを考えてました。
ある程度の収入の見通しがないと、会社も辞めれないし、独立するにしても、転職するにしてもうまくいくとは限らないし。
で、今流行り?の副業をやってみようと考えました。
今だと、リアルワールドとかCrowdWorksとかサイトで手軽に在宅でできる副業が見つかるので、どんな仕事があるかみてみました。
システム開発系に絞ると、簡単なWEBサイト構築とか、スマホゲームの作成とかが多いですね。その中で、意外と多いのがWEBからのデータ抽出ツールの作成依頼!!
いわゆる、WEBスクレイピングという技術を使う仕事がわりと多いことに気づきました。
なんで、手始めにWEBスクレイピングで何ができるか?どのぐらいの難易度かを確認するためにWEBスクレイピングで簡単なデータ抽出ツールを作成してみることにしました。
手始めにyahooファイナンスから必要なデータを取得してみる
やりたいこと
yahooファイナンスの画面から、指定した銘柄の「売上高」、「営業利益」、「経常利益」、「当期利益」を抽出してくる。
ソースコードは下記のような感じ。
これをファイル名「yahoo.rb」とかで保存して、コマンドプロンプトから
C:\Users\XXXXX\Desktop\ruby>ruby yahoo.rb
って感じで実行すればOK。
require 'mechanize'#mechanizeライブラリを使う宣言 agent = Mechanize.new#①Mechanizeオブジェクトを生成してagent変数に設定する agent.agent.http.ca_file = 'C:/Users/XXXXXX/Desktop/ssl.pem'#②セキュリティ証明書ファイルを指定する comp_code = [9984, 9449, 7774 ]#③データ抽出したい銘柄コードを指定して配列comp_codeに設定 comp_code.each do |x|#④comp_code配列の1要素がx変数に入りdo~endの処理をループする puts "銘柄コード:#{x}"#⑤情報を出力する銘柄コードを表示 page = agent.get("http://profile.yahoo.co.jp/independent/#{x}")#⑥対象の画面のURLを指定して該当のページのhtmlをpage変数に格納 table_tr = page.search('table.yjMt tr')#⑦page変数に格納されているhtmlからcssセレクタを指定して要素を検索。tableタグのクラス名「yjMt」のtrタグを探して!って意味 #<table class="yjMt">タグで囲まれているtrタグを1要素として探してって意味 #⑧下記は各要素を出力 print "#{table_tr[5].text()}".gsub(/\n(\s| )*\n/, "\n").gsub(/(\r\n|\r|\n)/, ",")#改行を","に置換 puts print "#{table_tr[6].text()}".gsub(/\n(\s| )*\n/, "\n").gsub(/(\r\n|\r|\n)/, ",")#改行を","に置換 puts print "#{table_tr[7].text()}".gsub(/\n(\s| )*\n/, "\n").gsub(/(\r\n|\r|\n)/, ",")#改行を","に置換 puts print "#{table_tr[8].text()}".gsub(/\n(\s| )*\n/, "\n").gsub(/(\r\n|\r|\n)/, ",")#改行を","に置換" puts puts sleep(1) #SLEEP1秒 end
途中、ちょっと躓いたけど、なんとかできた。
ソースの解説は、コメントみればそのまんまなんだけど、Mechanizeってライブラリが超優秀だからこいつ使えば簡単にできる。
①Mechanizeオブジェクトを生成。
②セキュリティ証明書ファイルを指定する。ファイル作成方法はググればすぐでてくる。これがないとサイト先でエラーとなってスクレイピングができない。
③データ抽出したい銘柄コードを指定して配列comp_codeに設定
④eachコマンドはrubyでは必須のループコマンド、配列オブジェクト(上記でいうとcomp_code変数)から配列の要素[0],[1]・・・を最後まで純にループして、|x|変数に代入してdo~endまでの処理を実行
⑤情報を出力する銘柄コードを表示
⑥URLを指定して該当ページのhtmlを取得。取得したhtmlはpage変数(クラス名page)に格納される
⑦ここがWEBスクレイピングの肝心要の処理!pageに格納されたhtmlから必要な要素だけを指定してくるとこ。page.bodyとかで一回全html出力して、そこから必要な情報のcssセレクタを抽出してくる。
今回の例だと、