インドネシアのITサービス

2024/04/05

ジャカルタ

一般的に「IT業界」のサービスはSNSやEコマース、WEBマーケティングなどのインターネット・WEB業界、システムインテグレーターや携帯キャリア―などの通信を含む情報処理・情報通信サービス業界、OSやデータベース、パッケージソフトウェアなどを開発販売するソフトウェア業界、サーバーやネットワーク機器の導入等を行うハードウェア業界の4種類に分類されます。

このIT業界に属する会社を僕はITサービス会社と呼んでおり、インドネシアにも同じようなITサービス会社が多数ありますが、近年のインターネット技術の急速な発展と普及により、優秀なIT人材を輩出することで知られているジャカルタのビヌス大学(BINUS)やバンドゥンのバンドゥン工科大学、インドネシアコンピューター大学(UNIKOM)の学生達は、多くがインターネット・WEB業界やソフトウェア業界を志望するようです。

当ブログでは僕と同じようにインドネシアに関わり合いを持って仕事をする人が、日常生活やビジネスの現場で出会うさまざまな事象のコンテキスト(背景)の理解の一助となるようなITサービスについての記事を書いています。

ソフトウェア

インドネシアの違法コピーソフトウェア

20年前に比べて改善されたとはいえ、いまだにインドネシアのソフトウェアの83%が違法コピーであり、インストール時にライセンスの防御を解除するためのKMS認証クラックソフトを使用する際に、PCのアンチウィルスソフトをオフにする必要があるため、バックドア用のポートを開けて情報漏洩を企てるマルウェアの標的になりやすいと言われています。

コピーライト(Copyright)は著作権という意味であり、商品でもWEBサイトでも他人が作ったものを勝手にコピーしたら当然ながら違法になります。一方でオープンソースのフリーソフトウェアの場合は、コピーレフト(Copyleft)という全く価値観が異なる考え方に基づいており、「修正したソースとその派生物は、元のライセンスと同じ条件で配布しなければならない」という、むしろコピーして改変して配布することを前提としたものです。

インドネシアで頻発する不正アクセス

インドネシアでもコロナ禍でオンライン上でのコミュニケーションツールや遠隔操作ツールを利用する機会が増えましたが、愉快犯による不正侵入の事例が数多く報道されています。

また日系企業の業務システムサーバーへの不正侵入のほとんどが元社員による怨恨が理由であり、アクセス履歴の管理や退職した社員のアカウントの削除など、基本的なITシステム運用手順の見直しが迫られています。

バックドア

インドネシアでよくある不正アクセスの背景

システムにバックドアを仕込まれる動機は、所有者に気づかれないように不正アクセスを続けたり、閲覧者を特定のサイトへ不正リダイレクトで誘導するフィッシング詐欺であったり、サイトから不特定多数のメールアドレスにスパムメールを送り続けたりするものです。

続きを見る

マルウェアの標的になりやすいWordPress

PCのOSの世界標準であるMicrosoft Windowsがウィルスの標的となるように、CMS(コンテンツマネージメントシステム)の世界標準となりつつあるWordPressもウィルスの標的となりやすく、対応するセキュリティプラグインの防御能力だけでは不完全であるという弱点があります。

WordPressで構築したサイトならウィルスコードが埋め込まれる可能性のある場所はおおよそ以下のとおりになります。

  1. WordPress本体のファイル
  2. テーマファイル本体
  3. テーマ設定
  4. プラグイン本体
  5. プラグイン設定
  6. データベース(投稿・固定ページ)
ジャカルタ

WEBサイトがウィルス(マルウェア)に感染したときの対処

マルウェアが埋め込まれる場所はWordPress本体、テーマファイル(本体・設定)、プラグイン(本体・設定)、データベース(投稿・固定ページ)であり、管理画面フォルダwp-adminにBasic認証をかけ、プラグインでセキュリティを強化する必要があります。

続きを見る

内部統制とITコンプライアンス

「内部統制とは何か」とは「業務フローの承認機能を健全にコントロールすること」であり、これは「社内コンプライアンスを遵守させること」と同義と言えます。

財務諸表の適正性をチェックするには業務オペレーションの証拠である伝票のチェックが必要になりますが、膨大に蓄積した伝票をすべてチェックしていくのは大変であるため、基幹システムでデータが適正に流れているかどうかのチェックをすることで末端の伝票チェックをカバーできます。

それでいうデータが適正に流れるとは、システムの承認機能(Approval)がキチンと機能しているということであり、これを保証させるものがいわゆるIT業務処理統制にあたるものです。

ジャカルタの朝

内部統制とITコンプライアンス 【システム上で伝票が適切な承認機能の元で発行されているかで財務諸表の適正性を判断】

内部統制とは業務フローの承認機能を健全にコントロールすることであり、そのためにはシステム上で伝票が適切な承認機能の元で発行されているITコンプライアンスの順守の有無をチェックする必要があります。

続きを見る

公開鍵暗号化方式

公開鍵暗号化方式によるSSH接続は、管理者が公開鍵(public key)と秘密鍵(private key)を作成し公開鍵をサーバーのOpenSSHに登録します。

ログインを許可したユーザーに秘密鍵をパスフレーズで暗号化した上で渡し、秘密鍵を持ったユーザーはサーバーにアクセス要求します。

サーバーは乱数を生成しハッシュ値を計算し、公開鍵で暗号化した上でアクセス要求したユーザーに送信し、ユーザーはまずパスフレーズで秘密鍵を復号化し、サーバーから送られてきた乱数を秘密鍵で復号化し、ハッシュ値を計算しサーバーに送信します。

サーバーはユーザーから送られてきたハッシュ値がサーバーで計算したハッシュ値と同じなら認証します。

WebEX・Skype・Team Viewerなどのリモートツール

コロナ禍のリモート会議システムとして世界中で利用されるようになったZOOMは、元々は代表的なWEB会議アプリケーションだったWebEXの中国系技術者が中心となって設立された会社です。

コロナ禍の影響で非対面型の仕事が増える中、もっとも活躍したITツールがWEB会議のZOOM、案件管理のMicrosoft Teams、そしてリモート接続のTeam Viewerでした。

バージョン管理におけるコピー・マージ方式

Gitは元々Linuxカーネルのソースコード管理のためのリポジトリのパッケージですが、今ではシステム開発全般のバージョン管理に汎用化されており、GitのリモートリポジトリのホスティングサービスであるGithubではバージョン管理にコピー・マージ方式を採用しています。

Aさんがファイルをチェックアウト(データにロックをかける)して作業している間に、Bさんが作業フォルダにファイルをダウンロードして作業してから、Aさんがチェックイン(データを保存しロック解除)したタイミングで、Bさんが作業後のファイルをアップロードすると、Bさんの修正分(差分)はtransactionフォルダに圧縮保存され、次に誰かがチェックインしたタイミングでファイルにマージされ、差分はhistoryフォルダに移動します。

チェックアウト/チェックインでファイル本体を排他制御し、ダウンロード/アップロードでデータの差分管理をし、次のチェックインのタイミングでマージされるという仕組みです。

ただし差分のマージはあくまでテーブルのキーを基準に行なうとはいえ、排他制御をかけるわけではないので、同一レコードを同時に複数端末から修正を行なう場合は上書きが起こるのはDBの排他制御と同じです。

Oracleのインストール

「検索のOracle、更新のSQLServer」と言われますが、感覚的にはデータ量の多い大規模なシステムにはOracle、中堅どころの規模にはSQLServerが採用されるケースが多いようで、これはSQLServerはWindowsでしか使用できない一方で、OracleはUnix系サーバでも利用できるという汎用性の違いがも多少影響していると思います。

Oracle

Oracle 11g R2のインストール手順を粛々とまとめてみた。

SQLServerはWindowsサーバー上でしか使えませんが、OracleはLinux上でも使えるため、多くのインターネット上の巨大サービスのデータ管理で採用されてきた歴史があります。検索やSQL処理スピードは体感としてOracleのほうが快適に感じますが、管理ツールはSQLServerのほうが豊富で使いやすいです。

続きを見る

バッチファイルの書き方

バッチファイルはWindowsのシェル(コマンドプロンプト)で実行させたい処理を、まとめて呼び出して走らせるための、拡張子がbatのテキストファイルでDosの時代から存在しました。

SQLの外部結合と内部結合

外部結合LEFT JOINは左のテーブルをすべて抽出した上で、これを基準としてON以下の外部結合条件に合致すれば右テーブルのレコードを結合し、内部結合INNER JOINはWHEREと同じ完全内部結合であり、ON以下の内部結合条件が両方のテーブルに合致する場合のみレコードを結合します。

業務システムの実績データを分析する際にLEFT JOINを使うケースが多いのは、実績(左)に含まれない不足情報をマスタ(右)から追加する、というニーズが多いからです。

ハードウェア

ストレージエリアネットワーク

大学や研究機関の学術データ、膨大なトランザクションを処理する企業の基幹システムなどで、ストレージへより早くデータ転送するニーズがあれば、デバイス間をファイバーチャネルで結ぶSAN(Storage Area Network)が構築されます。

プロジェクターの選び方

プロジェクターの投影方式(Projection)は現在ではDLP(Digital Light Processing)方式一択なので、注意すべきは解像度(Resolution)と明るさ(Brightness)で、セミナーや映画の上映会で使うのであれば十分な画素のワイド画面が必要ですが、予算限定でプレゼン用のプロジェクターを買うのなら、画素よりも明るさを優先させるべきです。

ライセンス管理用センチネルプロテクター

SentinelはSafeNet社のソフトのライセンス保護のための製品で、プロテクトの方法としてハードウェア型(USBドングル)、ソフトウェア型、クラウド型の3種類があります。

電気と電力(W)と電流(A)はほぼ同じ意味で使われる。

電気とは電子の動きで生じる働きの総称で、電力会社、PCの電力使用量、原発の発電量など単位は電力(W)です。
電力(Electric power)とは電流エネルギーの消費量ということになり、一般的には電流(Electric current)は電気とほぼ同意義で使用されていると思います。

  • 電気の流れる量が電流で(Electric current)ありアンペア(A)で表す。
  • 電流を流すには電圧(Voltage)が必要でボルト(V)で表す。電圧が強いほど遠くに電流を流せる。
  • 電流のあるところ抵抗(Resistance)が発生しこれをオーム(Ω)で表す。

電圧(V)=電流(A)x抵抗(Ω)をオームの法則といい、物質に電流が流れるとジュール熱が発生しますが、Spot weldingはまさに電気抵抗熱を利用した溶接です。

UPSの単位であるネットの消費電力(W)はグロスの皮相電力(VA)の6掛と覚えておくと、必要なUPSの容量を見積もれます。

  • スポットウェルディングは電気抵抗熱を利用した溶接
    電気の流れる量が電流で(Electric current)ありアンペア(A)で表す。
    電流を流すには電圧(Voltage)が必要でボルト(V)で表す。電圧が強いほど遠くに電流を流せる。
    UPSの単位である消費電力(W)を生み出す皮相電力(VA)
  • サーバー1台の使用電力は670Wなので2台で1370W、モニターを最大100Wとすると1470W。
  • 消費電力(W)=皮相電力(VA)x力率(仕事をしない電流を考慮)なので1470÷0.6=2450VA
  • 交流を直流に変換するのがコンバーター(AC/DC:整流器)
  • その逆がインバーター(DC/AC:逆変換装置)で、インバーターは制御装置と組み合わせることで省エネルギー効果をもたらし、エアコンで室内負荷に応じた柔軟なコンプレッサーの運転をさせます。
  • 直流電力を希望の直流電力に変換するDC/DCコンバーターをスイッチング電源(Switching Power Supply)と呼びます。
工場

グロスの皮相電力とネットの消費電力で表現されるUPSの供給電力

UPSの供給電力がグロスの皮相電力で表示される場合、おおよそ力率である6掛けの数字がネットの消費電力となり単位ワットで表現されます。電力は単位アンペアで表現される電流エネルギーの消費量と言えます。

続きを見る

ネットワーク

周波数は1秒間に何回振動するか(波)であり高いほど速い

電波や電磁波のスピードは光の速さと同じく30万km/秒(地球7周半)です。

  • 周波数=1秒間の波の数
  • 波長=波の長さ

よって波長(1つの波の長さ)x周波数=30万km/秒となります。
周波数が高い(波の数が多い)ほど波長が短いので、同じスピードでもより多くの情報を送ることができます。

光も電波も電磁波(空間の電場と磁場の変化によって作られる波、電場の周りに磁場が発生する)の仲間で、周波数が大きいほど波長は短くなり通信速度は速くなります。

モバイル通信の規格でみると低帯域の3Gののほうが障害物に強くより遠く届きます。

  • 3G(3rd Generation)の周波数は700~900MHzの低帯域=数Mbps(1秒間に数Mビット)
  • 4G(4th Generation)の周波数は1.5~2GHzの高帯域=数十Mbps(1秒間に数十Mビット)

ADSL(Asymmetric Digital Subscriber Line)は、アナログ電話回線を使用する上り(アップリンク)と下り(ダウンリンク)の速度が非対称(Asymmetric)なデジタル有線通信で、通信インフラ劣悪なインドネシアでは、既存の電話線を使えるということで重宝されてきましたが、光ファイバーの設置やワイヤレス基地局の整備により、最近は少なくなりました。ちなみにAsymmetricは非対称、Asynchronous(アシンクロナス)は非同期です。

DNSとドメインコントローラー

Gmailにメールサーバーを移す方法

  1. Googleへのドメインの所有者証明
    レンタルサーバーのルートディレクトリにGoogle指定のファイルをアップロードしてGoogleに確認してもらう。
    (FTPでファイルをAレコードで指定されているサーバーにアップできるのはそのドメインの所有者だけ)
  2. DNSサーバーのMXレコードの宛先をGoogleに変更(旧ドメイン管理画面から)
  3. 過去メールをIMAPでGoogleにアップロード
  4. クライアントのメーラーの設定

ドメインの移管(転入)を行なう場合、まず移管先のプロバイダと契約したら旧プロバイダからEPP key (AuthCode)を発行してもらい、これをもってDNS登録を行なってもらう。

WEBサイトを開設するためにプロバイダと契約するということは以下を意味します。

  • ドメイン取得を代行し、ホスティング会社のルーターのIPアドレスとドメイン名のリンク情報を上位のDNSサーバーに登録
    ⇒URLを打ち込むとプロバイダのルータのIPに飛ぶ。
  • ホスティング会社のDNSサーバーに以下を登録<
    • Aレコード(ドメインのアドレス)
    • CNAMEレコード(サブドメイン作成に使用)
    • MXレコード(メール配信先サーバーアドレス)

    ⇒プロバイダ内で管理されているローカルIPにマッピングされる。

  • サーバースペースも貸してもらう。
  • メールBOXも置かせてもらう

つまりロリポップでサーバースペースを借りて、ムームードメインでドメイン管理してもらうことも可能。

LAN上でのワークグループとドメインコントローラーでの管理の違い。

  • ワークグループでの管理
    • ネットワーク上のIPアドレスとドメイン名とのマッピングを行なうのがインターネットの場合がDNSであり、LANの場合がドメインコントローラー。
    • サーバーはワークグループのメンバーサーバーとして設定し、ユーザー管理はコントロールパネルの管理ツールからユーザーやグループの設定。
    • IPアドレスまたはネットワークパス「\\server1\xxx\yyy」を打ち込むとユーザーIDとパスワードが聞かれ(朝一のみ)ログイン可能。
    • 各クライアントPCにサーバー上の所定のフォルダへのマッピングを設定し、ショートカットをデスクトップに置いておけばIDとパスワード入力でアクセスできるようになる。
  • ドメインサーバーでの管理
    • 上の部署、支店、地域等を結んだ全社的な大規模ネットワークを構築する際には、ドメイン(全体の中でのユーザーとPCの管理単位)という概念を導入し、アクティブディレクトリを設定することでドメインサーバーとしての機能が使える。
    • アクティブディレクトリを設定するにあたって必ずドメインコントローラーにhogehoge.comみたいに会社名(部署・支店・地域)に.comをつけたドメイン名をサーバーのIPアドレスとマッピング。
    • クライアントPCをワークグループではなくドメインメンバーにすると、Windowsログインからドメインコントローラーによるユーザー管理に移行されるので、LAN上へのアクセスコントロールという観点からセキュリティレベルが格段に上がる。
    • XP Home EditionやWin7 Home PremiumがインストールされたPCをドメインネットワークに登録することはできないがドメインネットワーク上のネットワーク資源を利用できない、という意味ではなく、あくまでドメインコントローラのディレクトリにコンピュータを登録できないだけ、ネットワーク資源にアクセスすることはできる。
ルーター

インターネットとLAN上におけるDNSとドメインコントローラーの考え方

インターネット上のドメインは、DNSサーバー上にプロバイダのルーターのIPアドレスを人間が理解しやすい文字列にマッピングさせたものであり、LANの中でドメインの場合は、ドメインコントローラー上にサーバーのIPアドレスをユーザーとPCの大枠の管理単位でマッピングしたものです。

続きを見る

ネットワーク機器

ModemはModular(変調 アナログ→デジタル)とDemodular(復調 デジタル→アナログ)の頭をとってくっつけた造語であり、役割はダイアルアップとデータの変復調です。

ルーターはLANとLANを繋ぐこと、LANから別のLANまでのルーティング(道案内)が役割で、同一敷地内のLAN同士を結ぶ場合はローカルルーター、遠距離のLAN同士を結ぶ場合はリモートルーターと呼ばれ、モデムと異なり近距離であろうと遠距離であろうとデータ通信はすべてデジタルで行われTCP/IPというプロトコルを通して行われます。

リピータハブ(Unmanaged)はデータが接続されるすべての端末に送信しますが、スイッチングハブ(Managed)は宛先を判断して送信します。

監視カメラの映像をインターネットで配信する方法

監視カメラの映像をインターネット経由で配信するには、カメラの台数分のチャンネル(入力端子)と、モニター用の出力端子と、インターネット配信用にLANケーブルの出力インターフェイス(RJ-45)が付いたデジタルビデオレコーダー(DVR)が必要です。

監視カメラの映像をインターネット上から見られるようにする(配信する)には、固定IPに監視カメラの出力ポート番号を指定する必要がありますが、プロバイダ側のルーターにポート番号を利用可能に設定(ポートを開けてもらう)します。

社内側のルーターにMikrotik社のルータを使えばアメリカのRethem Hosting社のDDNS(Dynamic Domain Name System)サービスを利用できるので、Mikrotikのルーターの社内IPにグローバルIPを動的に割り当てedns.bizというドメインのサブドメインで配信できます。

監視カメラ

インドネシア税関が求める監視カメラの映像をインターネット経由で配信する方法【MicrotikのルーターによるDDNSサービス】

監視カメラの映像をインターネット経由で配信するためにMicrotikのルーターを購入し、アメリカのRethem Hosting社が提供するDDNSサービスで、edns.bizというドメインに設定したサブドメインを、Mikrotikのルータに動的に割り当てられるグローバルIPに変換します。

続きを見る

WordPress

WordPressの仕組み

フロントエンド開発を「ユーザーに見える部分の開発」、バックエンド開発を「ユーザーに見えない裏方処理の開発」と定義すれば、WEBサイト全体はフロントエンド(View)で入力されたデータが、バックエンドで処理(Controller)されて、データベースに格納(Model)されるという動きをします。

WordPressはテーマ(View)とコアシステム&拡張機能プラグイン(Controller)とMySQLが独立して機能するという意味で、MVCモデルのような動きをすると言えますが、MVCフレームワークではないのでWordPressをインストールしたディレクトリやテーマフォルダの中に、viewとかcontrollerとかmodelというフォルダは存在しません。

テンプレート階層とテンプレートタグ

テーマのテンプレートファイルは、PHPファイルとスタイルシートから構成され、「wp-content/themes」内のテーマフォルダに格納されます。

テーマ用のPHPファイルの中に、1人だけ拡張テーマ関数を集めたfunctions.phpという色違いが居り、これがwp-includes内の関数ファイルと同様に、自動的にWordPressの初期化中にロードされ、WordPressの拡張インターフェイスのような機能を果たします。

プラグインの開発

WordPress本体(コアシステム)のロジック内に、do_actionとかapply_filterとかでキーが仕込んであるので、開発するプラグイン関数の中に、キーと紐付けするためのadd_actionとかadd_filterという命令を記述します。

WordPress本体でロジックが実行され動作するときには必ずアクションが起動され、出力がされる時には必ずフィルターが起動されます。

固定ページと投稿記事の派生テンプレート

投稿記事のメインクエリ内の日付や著者を削除して、本文欄に商品情報を配置していってもいいわけですが、商品名・サイズ・価格など、どのページにも必ず必要になる情報を、膨大な数の全商品ページにHTMLでコーディングするのは非効率です。

投稿記事が持つカテゴリやタグといったタクソノミ機能を利用しながら、全商品ページで必要になる共通の情報は、管理画面の投稿画面からタイトルやコンテンツと同じように公開・更新できるようにして、作業負荷を軽減し入力ミスを防止したい。

投稿タイプ・フィールド・タクソノミの追加

投稿記事の入力画面に、共通情報用の入力フィールドをカスタムフィールドで追加し、管理画面からのコンテンツ作成を「投稿(post)」「固定ページ(page)」とは違う第三の投稿タイプ(post_type)として定義できます。

また標準ではカテゴリとタグという2つのタクソノミが利用できますが、商品分類の切り口は、価格・サイズ・在庫数量・色・材質というように多数ありますので、第三の分類「商品カタログ」をタクソノミとして定義できます。

WordPressテンプレートファイルの構成

WordPressは起動時の最初にデータベースやfunctions.phpの情報を読み込み環境設定を行い、URLからページの種類を判断しあてはまるテンプレートファイルをテンプレート階層に従って優先度の高い順に探し、パラメータに応じたSQL文を組み立て記事を取得し、WEBページとしてレンダリングします。

WordPressの起動

WordPressの起動1【 WordPressテンプレートファイルの構成】

WordPressはURLのクエリ文字列を使用して、ページの表示に使用するテンプレートファイルが見つかるまでテンプレート階層を検索し、複数のテンプレートの中から優先順位が高いものを選択します。

続きを見る

WordPress起動時に読み込まれるコアファイルの順番

WordPressはURLクエリストリングを処理しテーマを表示しますが、その前にコアファイルがWordPressを起動させるまでにファイルが順番に実行されます。

WP_Queryクラスのカスタマイズ

WordPressはURLクエリストリングに適合したテンプレートをテンプレート階層に従って選択し、データベースから取得したメインクエリを$wp_queryに格納し、have_posts()が$wp_query内にデータを確認できる間はthe_posts()で投稿を、the_title()でタイトルを取得し表示し続けます。

WEB

スタイルシートによるレイアウト調整

要素という言葉は「物・事を成り立たせるもとであるそれ以上は簡単なものに分析できないもの」というこれ以上分解できない絶対的な単位という意味があります。

一方システムは人間の言葉をそのままでは理解できないので、理解できるようにタグを付けて範囲を明確にしてあげた後のカタマリを要素と考えます。

人間世界でプロパティ(属性)という言葉は「土地・資産・所有物」という意味であり、世の中のすべてのオブジェクトは属性を持っています。

システムの世界の属性はオブジェクトが持つ「特徴・性質」という意味であり、HTML要素内の属性(id, classなど)はDOMオブジェクトのプロパティに割り当てられ、CSSでセレクタというオブジェクトとして、プロパティと値を持っています

セレクタはWEB上のオブジェクトに対して、装飾(CSSにてプロパティに値を設定)したり処理を実行(メソッドやイベント)したりするための仲介役ですが、セレクタになる資格のあるものはHTML要素またはHTML属性です。

配列はお年玉用のルピア紙幣の入った封筒を束ねたようなものであり、封筒に連番が振ってあれば通常配列、渡す相手の名前が書いてあれば連想配列となります。要素はこの場合のルピア紙幣の入った封筒全体であり、ルピア紙幣が値、封筒に振ってあるのが連番ならインデックス、相手の名前ならキーとなります。

封筒からルピア紙幣を出した後の相手の名前付きの空の封筒をプロパティと考えると、入れるものはルピア紙幣に限る必要はなく、車のキーでも手紙でもいいわけです。

航空券が入っている場合は、「スカルノハッタ空港からバリ島に飛ぶ」というアクションを約束するものですので、航空券は関数リテラルという値であると考えられ、この場合は別の封筒には名義人の名前を入れておきます(参照渡し)。

以前のHTMLタグは見出し・段落・表などブロック(かたまり)として認識されるブロックレベル要素と、ブロックレベル要素の内容として用いられるインライン要素に分類されていましたが、HTML5ではフローコンテンツ、セクショニングコンテンツ、ヘッディングコンテンツ、フレージングコンテンツ、埋め込みコンテンツ、インタラクティブコンテンツ、フォーム関連コンテンツの7つに分類されます。

WEB開発言語(タグ)の役割(DOMの基本操作)

開発言語(タグ)の役割分担です。

  • HTML
    タグ(要素)単位でコンテンツに意味付けし、ブラウザのDOM(API)によりオブジェクト化され、JavaScriptから操作される。
  • CSS
    HTMLの要素や属性をセレクタというオブジェクトとして扱い、プロパティに値をセットすることで装飾。
  • PHP
    ブラウザから受け取った要求をサーバー側処理して結果をブラウザにhtmlとして返す。
  • JavaScript
    ブラウザに内蔵されたスクリプト言語であり、イベントに応じて関数を実行したりDOMを通してWEBサイトの表示を変化させたりする。
  • jQuery+jQuery Easy UI
    JavaScriptで頻繁に使う関数のライブラリで、セレクタのcssに値セット、サイト構築後に関数実行、エレメントの追加、オブジェクトのプロパティに値セットなどの機能がある。

ブラウザはHTMLの開始タグから終了タグまでを、1つのDOM(Document Object Model)オブジェクトとして要素化(エレメント化)し、DOMはJavaScriptやjQueryからエレメントにアクセスするために、Nodeインターフェイスを提供します。

例えば製品クラスは製品にインスタンス化できますが、セット販売用に製品を組み合わせたセット品はそのままではインスタンス化できないファントムであり、インスタンス化できない抽象クラスであるインターフェイスと呼ばれます。

製造工程途中で跳ね出される中間品のうち在庫があるものは所要量展開時に引き当てをしたいが、新規に製造指図は発行したくない場合はファントム品という扱いになります。

HTML

HTMLとCSSの位置づけ【DOMの基本操作】

WEBシステム開発とは何かと問われた場合の最大公約数的答えは、多少くどい言い方にはなりますが、ブラウザからの要求をサーバー側で処理したHTMLを、ブラウザが受け取ってスクリプトを実行した結果をレンダリングしてWEBサイトという形で表示する過程を構築することになります。

続きを見る

Ajax関数によるGET通信とPOST通信

ブラウザとWEBサーバー間のデータ通信であるHTTPプロトコルはOSI参照モデルのセッション層に属しており、ブラウザ上のHTMLフォームに入力したデータをサーバーに引き継ぐGETメソッドとPOSTメソッドもHTTPプロトコルに定義されています。

ブラウザの役割は、ユーザーが要求したURLのリソースをサーバーに要求して、ブラウザウィンドウに表示(レンダリング)することですが、内部では以下の2つを行なっています。

  1. HTMLを読み込むことでDOMを生成
  2. JavaScriptやjQueryがプログラムからDOMにアクセスできるようにNodeインターフェイスを提供

nodeインターフェイスを通してアクセスできるDOMの最上位オブジェクト(エレメント)は、html開始タグ<html>とhtml終了タグ</html>から生成されるdocumentオブジェクトです。

GETはフォームに入力したデータを元ににサーバーから情報を取得することに重きを置いており、Google検索やWordPressの下書きとして保存などはGETです。GETメソッドは、URLの後ろに「?」で始まり、「=」で結ばれた名前と値を「&」で連結したクエリ文字列によってデータを引き継ぎます。

一方POSTはフォームのデータを投稿することに重きを置いており、WordPressの新規投稿はPOSTになります。

Javascript

Ajax関数によるGET通信とPOST通信

jQueryはDOM(Document Object Model)を操作するためにJavaScriptを元に設計されたJavaScriptの拡張ライブラリで、nodeインターフェイスを通してアクセスできるDOMの最上位オブジェクト(エレメント)は、html開始タグ<html>とhtml終了タグ</html>から生成されるdocumentオブジェクトです。

続きを見る

PHP・JavaScript・VBの書き方の違い

プログラムのコードは変数、値(リテラル)、式、制御文の4つから構成され、制御文の書き方には順次処理、分岐処理、繰り返し処理の3種類があります。

言語によってこの4要素の表現方法が異なり、しかもコード内部に書かれるSQL文も、接続するデータベースによって多少の差異がある、複数のプログラム言語を扱うときに何となくモヤッとした曖昧感が残る原因の正体がここにあります。

当然すべての型や内部関数を網羅することはできませんが「どこに曖昧感の原因があるのか」を以下のマトリックスから概念的に掴みたいと思います。

連想配列に関数リテラルを格納

関数は用途や場所によって呼称が変わりますが、連想配列の中に変数の値が格納されるのと同じように、関数も無名関数として連想配列に格納され、同じようにキー(リテラル)で管理される場合はメソッドと呼ばれ、その配列自身を実体化(オブジェクト化)します。

PHP

連想配列に関数リテラルを格納してオブジェクトを生成

リテラルとは変数の対義語で、数値や文字列を直接に記述した定数のことですが、変数に関数を代入して記述することを関数リテラルと呼び、オブジェクト(連想配列)のデータをプロパティと値のペアで表現したものをオブジェクトリテラルと呼びます。

続きを見る

PHPからMySQLとSQLServerとOracleへの接続方法

ADOの場合Query実行結果を2次元配列であるrs(レコードセット)に格納し、レコードセットからフィールド名を指定することで値を取得し、レコードセットに対して直接MoveNextで行を進めていくが、MySQLの場合mysql_query関数によるQuery実行結果を2次元配列であるret(レコードセット)に格納し、レコード単位にmysql_fetch_array関数でで配列に格納した上でフィールドの値を取得する。

PHPからMySQLに接続するためには拡張ディレクトリに拡張モジュールであるphp_mysql.dllが配置され、php.iniに拡張指定がある必要があります。

PHPからSQLServerに接続するにはMicrosoft Drivers for PHP for SQL Serverという拡張モジュール(ドライバー)のdllファイルが必要であり、PHPコードからはドライバーの関数(API)を呼び出してSQL文を実行します。

PHPからOracleを操作するにはoci.dllとして実装されているOCI(Oracle Call Interface)というRDBMSのAPIを使用しますので、まずはApache起動時にoci.dllがロードされる必要があるわけで、その拡張モジュールとしてphp_oci8_11g.dllがプロシージャーエントリーポイントでリンクします。

PHP

PHPからSQLServerとOracleへの接続

インターネットの世界で発達したPHPですからMySQLを使うのが普通なのですが、仮にPHPが社内イントラネットの開発に使われる場合には、SQL Server、Oracle、Postgres、Accessなどの基幹システムのDBと接続することになります。

続きを見る

クリッカブルマップの作り方

今はGoogleで検索することでほとんどの情報を入手できる時代ですが、複雑なことを考えたり発案したりするためには、ある程度は事前に暗記することで素材が頭の中に入っている必要があります。

例えばインドネシアのシングルオリジン(生産地の農場単位)コーヒーの風味の傾向とそれを生み出す産地特有の風土や歴史などの基本情報を、地図上からクリック一つで参照できるような仕組みを作りたいとします。

地図をクリックすることで産地の説明ページにジャンプさせるためにHTML4.0のクリッカブルイメージマップを使用し、マウスオーバーでポップアップ表示するためにJavaScript使用し、レスポンシブサイトで可変サイズの画像のリンクエリアがずれないようにするためにjQUeryプラグインを利用するというようにHTMLとJavascript、CSS、jQueryなどWEB関連技術の基本的な仕組みの理解が必要になります。

jQueryプラグインであるjsTreeでツリー表示

ツリー表示のjsTreeはjQueryのプラグインでありscriptタグの中にjstreeプラグインを読み込む必要がありますが、DataGridはTabsなどと同じくJQuery UIのウィジェットにあたります。

  • ライブラリは汎用的関数の集合体
  • プラグインは特定ソフト用拡張プログラム
  • ウィジェットはライブラリ(プラグイン)が提供するコントロール(部品)
  • jQueryはJavaScriptでよく使われる機能を簡単に呼び出せるようにしたライブラリ
  • AjaxはJavaScriptの非同期通信に焦点をあてた概念
Javascript

再帰処理でHTMLリスト化しjsTreeでツリー表示

jsTreeはツリーを生成するjQueryのプラグインで、HTMLかXMLかJSONフォーマットのデータを読み込ます前提ですが、業務システムでDBのテーブルにある部品構成(BOM)や部門構成等をツリーで表示する場合には、HTMLリストを動的に生成してツリーに変換させます。

続きを見る

Apacheサーバー環境の設定

HTTP通信はクライアントからのリクエストに対してApacheサーバーがレスポンスを返すことで成立します。

HTTPサーバーとしての最大の機能はバーチャルホストであり、物理ディレクトリを仮想サーバーのDocumentRootに指定してURLを割り当てることで、1つのApacheサーバーで複数のドメインや複数のサブドメインの管理することができます。

Apacheサーバーのチューニングをするといういことは、Apache設定ファイルであるhttpd.confに、Apacheディレクティブと値(ON/OFF, 数字, HTTP環境変数, URLなど)を設定することであり、これを親子関係にある.htaccessに設定して、ディレクトリ単位に配置することもできます。