Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

intra-martのWeb Platform開発経験者がAccel Platformで開発する際に学習したほうがいい8つのこと。

ついこないだまでやってたプロジェクトがintra-mart Accel Platformでの開発の初体験でした。
そしてまた違うプロジェクトになったのでまた戻っても忘れないようにいろいろと気をつけることをメモってこうと思います。

intra-mart Accel Platform(iap)といって名前が大きく変わってますが、スクリプト開発する場合はそれほど大きくは変わらないので安心してください。(JavaEEはあまりやったことがないのでわからない)

僕も実際開発するまでいろいろと変わってるんだろうなー覚えるの大変そうだなーと思ってたんですけど、実際やってみるとコードを書くという点で言えばびっくりするほど何も変わりません。
htmlとjsを用意してinit()に初期処理を書くだけです。

コードを書く点以外のプラットフォームとして変わっているところもいろいろとあります。
以下にiwpと違う点を書きたいと思います。 iwp開発経験者は以下の点を重点的に学習するとiap開発スキルが身につくと思います。

1. ルーティング

いままではサーバにディレクトリ構成に応じた独自のパス(page)を元に定義していたのでurlがものすごい長くなったりしていました。これを解決するためにディレクトリ構成に影響せず仮想的に定義できる(path)という概念が導入されました。 pathに応じてjsに定義した関数(action)を呼び分けるってことも可能なのでいままでformにactionで指定していたことがpathだけで定義できるのは便利になりました。

そのpageとpathとactionの紐付けを記述するのがルーティングファイルです。WEB-INF/conf/routing-jssp-config におきます。
ただし、これにルーティングを加えたら再起動しないと反映されません。開発時は地味にめんどいです。

ルーティングの考えは最近のWEB開発フレームワークでは普通にあると思います。ただ、ほかのフレームワークにあるHTTPメソッドによるルーティングはないみたいです。 そしてルーティングには認可も定義します。(認可については次で)

学習するドキュメントは↓
ルーティング — スクリプト開発モデル プログラミングガイド   第16版 2020-04-01   intra-mart Accel Platform

2. 認可

この認可というものがiap開発の最大の難所だと思います。
いままではメニュー設定にロールを設定するだけで権限周りはいたってシンプルでした。
その反面、複数の権限の人が画面を使う場合は、使う人によってメニューを分けたりしないといけませんでした。
その対策として登場したのが認可です。

認可はユーザのアクセスをユーザが保持しているロール、組織、パブリックグループ等に応じて許可/拒否を行うだけなのですが…
この認可、もの凄く細かいところまで定義ができたり、継承ができます。はっきり言って高機能すぎです。ほどんどの開発ケースではオーバースペックだと思います。 そして難しい用語がいっぱいでてきます。(ポリシー、リソース、リソースグループ、サブジェクト)これらがどう関係しているのかいまだに理解できていないです。というか実際の開発をしながらこれらを理解する時間はとれないです。
im社以外にこれをほんとに使いこなしているベンダーは果たしているのか疑問です。

とは言えシンプルに使うこともできます。たいていは画面ごとにリソースを定義して認可の画面でポチポチするだけでOKだと思います。
ルーティングと違ってリアルタイムに反映されるのがいいですね~。

だだし、新しい画面を作成してメニューに追加したけど、認可とルーティングの整合性が合わなくなるとログインできなくなったりするので注意してください。(これについては以下のエントリーを確認してください)

final.hateblo.jp

学習するドキュメントは↓
認可 — スクリプト開発モデル プログラミングガイド   第16版 2020-04-01   intra-mart Accel Platform

3. テーマ(PageBuilder)

iapからフレームではなくなったこともあり、メニューの表示制御はPageBuilderによって行われます。
このことを理解していないとポップアップを表示するときにメニューがついてきたりしてびっくりします。

ポップアップに使用する画面はconf/theme-head-with-container-path-config でpathを指定したりしないといけないです。
そもそもiapではポップアップは推奨されていないみたいです。imuiPageDialogを使って、ライトボックスっぽく表示するのがいいみたいです。

学習するドキュメントは↓
http://www.intra-mart.jp/download/product/iap/im_ui/im_theme_specification/texts/components/PageBuilder.html

4. eBuilder(ユーザモジュール)

いままで開発したものは綺麗にパッケージングできませんでした。iapからはユーザモジュールという形でパッケージングできるようになりました。immファイルというただのzipですけど。
これに伴い、eBuilderの開発でのファイルの配置の仕方とかも大きく変わりました。
eBuilderについては以下のエントリーを参照してください。

final.hateblo.jp

im社のセミナーでは、このモジュールという概念を導入したことで正しい方法で製品カスタマイズをすることでバージョンアップも可能であるとうたわれていましたが、実際そんなプラグインで対応できるレベルのカスタマイズが要求されることはなく、このボタン消してほしい、この製品画面にこういう機能を追加してほしいとかっていうエンドユーザが多いのでそんなに変わっている気がしません。

5. SessionScopeStorage

その名の通り、セッションが生きている間のみ有効なストレージです。これが追加になりました。
ストレージと扱い方が同じでAPIの名前が違うだけなので簡単です。そして一時ファイルとかを出力する場合にとても使えます。
若干、APIの使い方が変わっています。

Storage — スクリプト開発モデル プログラミングガイド   第16版 2020-04-01   intra-mart Accel Platform

6. 外だしSQL

MyBatisっぽいアレです。文法は特殊ですけど、条件分岐とかもできます。
コードにSQLを書かなくていいのでコードがスッキリします。

学習するドキュメントは↓
データベース — スクリプト開発モデル プログラミングガイド   第16版 2020-04-01   intra-mart Accel Platform

7. API

APIはいろいろ変わっています。
特にクライアント側の画面周りはimuixxxxを主に使うことになると思います。
サーバ側はIM共通マスタのままなのでそんなに大きく変わらない気がしますが、非推奨のAPIも増えています。
とはいえ、たいていはAPIドキュメントを見ながら開発すれば問題ないと思います。

intra-mart Accel Platform API Documentation

あとiwpから移行の際は互換モジュールをいれればほとんどiwpと同じように動作しますが、中には互換で動かすとfalseを固定で返すという地雷もあるので以下の互換表をよく確認することをおすすめします。

intra-mart Accel Platform - Web Platform API互換対応表

8. テナント

ログイングループの代わりにテナントという概念が導入されました。
大雑把にみてログイングループと変わりはない気がします。
いちいちログイングループ管理者用のログイン画面からログインしなくてもユーザとかをいじれるようになったのは便利になったと思います。

とまぁ上記の8点をおさえておけばiwpしか経験したことがなくてもaccel開発できます!と言っても過言ではないと思いたい。

Windows 8.1 / 10で別のPCからc$(管理共有)でアクセスが拒否されたときにやること。

Windowsにはエクスプローラで"\IPアドレス\ドライブレター$"を入力すると、共有設定していなくても外からドライブの中を参照できる管理共有という便利な機能があります。

が、Windows8.1や10にしてから以下のようにc$(d$なども)でアクセスできなくなりました。
Android(ESファイルエクスプローラー)からもアクセスできなくなりました。

\\192.168.0.2\c$

エクスプローラで実行してユーザIDとパスワードを正しいものを入力しても

アクセスが拒否されました。

と表示されます。

Windows8.1からc$はできなくなったのかーと諦めていたのですが、先日仕事でWindows Server 2012を触ってたとき 普通にc$でアクセスできていたので、何かできる方法があるはずと思い再度調べてみました。

調べた結果、ユーザーアカウント制御(User Account Control。以下UAC)が問題っぽいです。
ここでスパっとUACを切ってもいいのですが、UACはシステムを保護してくれる重要なものです。
なので、今回はUACを有効にしたまま管理共有だけできるようにします。

UACを有効にしたまま、c$でアクセスできるようにするにはレジストリを編集する必要があるみたいです。
Windowsキー + Rで「regedit」とたたいてレジストリエディタを起動しましょう。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

にアクセスして新規にDWORD値を作成します。

名前
LocalAccountTokenFilterPolicy 1

レジストリの編集はこれだけでOKです。
ちなみにレジストリの編集に不安な方は以下のzipファイルをダウンロードして中にあるadminshare_on.regファイルを実行するだけで追加できます。

https://gist.github.com/finalstream/a6d0e15e9d3510397c9406588f1a55a1/archive/38f2238aa5ed67b299b7bde0d91db81e0514ef10.zip

これで再起動したら反映されます。

でも、これでもアクセスできませんでした。。

あと考えられるものと言えば...そうですWindowsファイアウォールです。

以下のようにファイアウォールの例外設定で「ファイルとプリンターの共有」にチェックをつければOKです。

image

これでc$でアクセスできるようになりました。

Windows インストール メディア作成ツールが0%のまま動かないとき

むか~しにキャンペーンで買ったWindows 8 Proのラインセンスキーを使用してWindows 8.1 Proをクリーンインストールするためのインストールメディアを作成しようと思い、メディア作成ツールを以下からダウンロードして実行しました。

windows.microsoft.com

すると以下のような画面が出て一向に0%から進みません。

f:id:finalstream:20160217235447p:plain

試しに1時間近く放置しましたがピクリとも動いてません。

調べてみるとRamDiskWindowsのテンポラリフォルダを指定していて容量が不足した場合にこのようなことになるとのこと。
エラーメッセージを出してくれないのは不親切ですねー。

まぁ仕方ないのでコマンドプロンプトを起動してテンポラリフォルダを一時的に変更します。

まずsetとたたいてテンポラリフォルダを確認します。

> set
…
TEMP=R:\temp
TMP=R:\temp
…

TEMPとTMPがRamDisk(Rドライブ)になっていることを確認します。
以下のようにsetコマンドでテンポラリフォルダを変更します。
設定先は4GB以上の開いているドライブならどこでもOKです。

> set TEMP=S:\temp
> set TEMP=S:\temp

再びsetコマンドをたたいて変更されていることを確認します。

> set
…
TEMP=S:\temp
TMP=S:\temp
…

この変更は一時的なもので同じコマンドプロンプト内のみで有効なものなので続けてダウンロードしたメディア作成ツールコマンドプロンプトから起動します。
パスはダウンロード先に応じて変更してください。

> U:\Donwloads\mediacreationtool.exe

これで0%から脱出できました。