ネクストエンジンのアプリ作成時にハマったこと



はじめに

  • ネクストエンジンのアプリを作ることになりました。
  • しょうもない所でハマったので、一旦現段階までを備忘のために整理していきます。

やりたいこと

  • 他の企業の在庫情報を自分の在庫へ反映したい
    • 1)他の企業の在庫情報を取得する
    • 2)1)の結果を自分の在庫へ反映する
    • 1,2を定期的(1時間に一回とかで自動で実施したい)

作ろうとしているもの

  • @バックエンド
    • ApacheとPHPでネクストエンジンのAPIを叩く仕組みを作る
    • GCPでサーバ作りました。
  • @フロント
    • 適当なデスクトップアプリを作って、バックエンドへ定期的にリクエスト送信する

できたもの

  • @バックエンド
    • GCP上で動くApacheとPHPでネクストエンジンのAPIを叩く仕組み
  • @フロント
    • バックエンドで作ったPHPをブラウザで表示&JSにて一定期間ごとにページをリロードする

ハマったこと

サーバ構築

GCPに鍵交換でSSH接続したいけど、どうすればいいかわからない??
RLogin(ターミナルソフト)での鍵交換の方法
  • ターミナルソフトにはRLoginを使っています。RLoginで鍵を作りたいけど方法がわかりません。
  • RLogin > ファイル > サーバに接続 > 新規 > サーバ > プロトコル > 認証キー の順で鍵の生成画面へ。一番下の「新規」の区分にて、任意の名前を入力 → 作成ボタン押下。
  • このときは気づかなかったんですが、ユーザ名がPCのユーザ名になっていました。次回鍵を作成する機会があれば、ユーザ名を指定できないかを試してみたいです。
  • 画面上段の認証キーリストに追加されていれば秘密鍵の作成OK。
  • 公開鍵は作成した秘密鍵を選択した状態で公開鍵ボタンを押下すると内容が表示されるのでコピーしておく。
GCPに鍵をどうやって登録するの?
  • ダッシュボードからComputer Engin → VMインスタンス → 対象を選択 → 編集
  • 画面下部のSSH認証鍵の項目から「項目を追加」を押下し、先程コピーした公開鍵を登録
SSH認証に失敗するよ?
  • 準備ができたので、RLoginからSSH接続を試みるも失敗。
    SSH2 User Auth Failure “publickey.gssapi-keyex,gssapi-with-mic”Status=1004
    というエラーメッセージ。
  • 原因は接続時のユーザ名を間違っていたことでした。
  • 正:公開鍵のユーザ名(GCPのコンソール画面のSSH認証鍵に表示されています)
  • 誤:GCPのログインユーザ名
  • こうして文章にすると「そりゃ入れないよね」感でいっぱいです。。
Apache + PHPが見れるようにするのにもはまりました。
  • Apacheインストール
    sudo yum -y install httpd 
    sudo systemctl start httpd.service 
    
  • http://サーバIPアドレス/ をブラウザに入れてApacheの初期ページが表示されることを確認。ここまで順調です。
    次のPHPでハマりました。
  • PHPインストール
    sudo yum -y install php php-mbstring php-pear
  • /var/web/hogehoge/ を作り index.php をおく。中身は
    ;
    だけでOK。ついでにパーミッションも変更。横着して777に。
  • Apacheの設定ファイル(/etc/httpd/conf/httpd.conf)更新
    • DocumentRoot に先程作成した /var/web/hogehoge/ を指定(120行目付近)
  • Apache再起動 
    sudo systemctl restart httpd.service
  • ブラウザで表示「http://サーバIPアドレス/index.php」 するも表示されない
  • Apacheのエラーログを見ると下記の内容が。
    Permission denied: [client xxx.xxx.xxx.xxx:xxxxx] AH00035: access to /xxx/XXXX denied (filesystem path '') because search permissions are missing on a component of the path
  • 原因はSELinuxっぽいです。以下、こちら「CentOS7.1 64bit SELinuxによるアクセス制御 」を参考にSELinuxをOFFにすればOKでした。

ネクストエンジン周りでハマったこと

neApiClientクラスが見つからない的なエラーが出る
在庫情報を全件取得しても0件。
  • 依頼主に聞いたらそんなはずはないよとのこと。
  • 開発中はテスト環境へ接続していて、テスト環境の在庫が0件だったからでした。
  • 在庫や受注の確認にはメインアプリを利用する必要があるけど、アカウントに利用権限を設定しないとテスト環境のメインアプリを利用できない。
  • 気を取り直して権限設定&在庫を登録したところ、無事在庫情報を取得できました。 
在庫情報の更新をPHPではどう書けばいいものやら??リファレンス見てもcurlなので、書き方がわかりません。。
  • Github にサンプルコードありました。

デスクトップアプリでハマったこと

CORSにひっかかる
  • サクッと動く&使ったことがないからってことでNWJSで作ろうとしましたが、アーキテクト以前の問題でCORSが乗り越えられません。。ajaxを使って、作成したPHPにリクエストを投げると下記のエラーが発生します。(php側には
    header('Access-Control-Allow-Origin: *');
    を記述済み)
    Failed to load https://base.next-engine.org/users/sign_in/?client_id=XXXXXXXXXXXXX&redirect_uri=https://作成したAPI: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

    深く調査していないので推測ですが、ネクストエンジン本体の方で許可してあげる必要があるのでしょうか??根が深そうな気がしたので、あっさりデスクトップアプリの作成を諦めブラウザで表示してもらう方に変更しました。

ここまでの所感

  • 実装自体は難しくないのに変な所に時間がかかっているイメージ
  • ネクストエンジン、リファレンスもGithubもあるし、開発者のコミュニティもあるので支援体制は手厚い
  • 「PHPかJavaがメインなんだったら、環境構築の手軽さからPHP」って思って、そこそこ進んだ後にNodeJS版の解説を見つけました。なんとわかりやすい。「NodeJSもあるけど、PHPのほうがサポート手厚そうなので、あまりきちんと書いたことないけどPHPで」って思った自分に喝を入れたい、、、。
  • 中の人が見てくれてたらいいな、レベルだけどテスト環境と本番と、見た目を著しく変えてもらえると嬉しい。。ヘッダの色を変えるとか。

0 件のコメント :

コメントを投稿