SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Curlで構築する長崎電子県庁システム(DBメンテナンスツール編)(AD)

Curlで構築する長崎電子県庁システム(DBメンテナンスツール)
概要とユーザーインターフェース

第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 およそ6000名の職員を抱える長崎県では、高い操作性とサーバ負荷の軽減を実現することのできるCurl言語を使って電子県庁システムの構築を行っています。現在、約30システムが稼動中です。本連載では、長崎県電子県庁システムの1つである「DBメンテナンスツール」をCurlで開発するにあたり苦労した点、工夫した点などを解説していきたいと思います。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 本連載では、DBメンテナンスツールの開発を通して、Curlの特徴を紹介していきます。読者の皆さんがCurlで開発するときの参考になれば幸いです。

長崎県庁との関係性

 長崎県は平成14年度に新たなIT調達方式「ながさきITモデル」を導入しました。このモデルは情報システムのコスト削減と地元IT企業の振興を目的としたものであることから、弊社にも参加機会が与えられ、平成15年から電子県庁システムの構築に関わらせていただています。

 なお、長崎県では電子県庁システムの一部をオープンソースとして公開しています。以下のWebサイトよりダウンロードすることができます。

長崎県電子県庁システムはCurlで開発されている

 およそ6000名の職員を抱える長崎県では、高い操作性とサーバ負荷の軽減を実現することのできるCurl言語を使って電子県庁システムの構築を行っています。現在、約30システムが稼動中です。

DBメンテツールを開発するに至った経緯

 ながさきITモデルは県職員が主体となってシステムの開発・運用を行う仕組みのため、職員がデータベース(MySQL)を操作することが当たり前のように行われています。ですが、県職員はデータベースの専門家ではないため、複雑なSQLを書けと言ってもそうそうできるものではありません。そこで、簡単に操作できる便利ツールが必要になります。このような理由から開発されたのがこのマスタメンテナンスツールです。

 以前、同様の主旨で開発されたPHP版がありましたが、これはテーブルやカラムの追加などがあるたびにプログラムの改修が必要でした。そこで、Curlの動的に入力コントロールを配置できる特性を活かして再開発を行いました。

DBメンテナンスツールの画面
DBメンテナンスツールの画面

Curlで開発する理由

 MySqlを操作するツールは、「かねやん」「phpMyadmin」など無料で使えるものがいろいろと出回っています。これらのツールは、システム開発に関わったことのある人にとっては難なく使えますが、素人にとっては使いやすいものとはいえないでしょう。

 例えば、「phpMyadmin」は機能が充実していますが、パッと見ただけでは最初にどのボタンを押せばよいかもわかりません。

phpMyadmin画面。知識のないユーザーにとっては直感的にわかりにくい。
phpMyadmin画面。知識のないユーザーにとっては直感的にわかりにくい。

 また、「かねやん」のUIはわかりやすいのですが、データの取得、更新にはSQLを書かなければいけません。

かねやん画面。処理によってはSQL文が必要になる。
かねやん画面。処理によってはSQL文が必要になる。

 こういった理由から、県職員の方に無理なく使っていただくためには、

  • わかりやすいUIの実現
  • SQLを書かずにデータ操作ができる
  • 軽快に動く

 この3つ課題をクリアしなければいけませんでした。それを実現するためにCurl言語は最適だったのです。

DBメンテツールの機能について

 このツールは以下のような機能を持っています。

  • データ新規登録・編集・削除
  • データ一括更新・一括削除
  • データ表示
データをテーブル一覧から表示できる
データをテーブル一覧から表示できる
  • データベース作成
  • データベース設定(データベースに和名を設定・データベースの削除)
  • テーブル作成
  • データ入力画面設定(データ入力画面での入力コントロールを設定します)
  • テーブル設定(テーブルに和名の設定・テーブルの削除)
  • 検索条件設定
検索条件を設定して検索できる
検索条件を設定して検索できる
  • ユーザーアクセス設定(各ユーザーが使用できるDB・テーブルを設定します)
  • テーブルコピー
  • データバックアップ(バックアップの作成とデータの復元を行います)
  • SQL実行(SQLを入力して実行します)

DBとの接続

 DBメンテナンスツールでは、データベースとの接続をPHPを経由して行っています。

 CurlからのPHP呼び出しには「HttpForm」を使用しています。PHPからの結果はXML形式で受け取り、Curl側でXMLを解析(パース)します。なお、サーバーサイドの言語はPHP以外でもOKです。

Curlのコントロール

 DBメンテナンスツールでは、ユーザビリティの向上に力を入れています。その一例として、「ツリー」「グリッド」を使用しました。ポピュラーなGUIですが、Curlにも標準コントロールとして搭載されており、使い勝手のよい機能を持っています。

1.TreeControl

 「かねやん」のデータベースをツリー表示するUIはとてもわかりやすいので、Curl版でも使用しています。Curlのツリービューは便利なコントロールで、ローカルアプリケーションのツリービューと同じように動作します。ノードが選択されたイベント、開いたときのイベントなども取得できます。

TreeControl
TreeControl

 カスタムすることで、先頭にアイコンをつけたり、ノードに画像を表示することもできます。DBメンテナンスツールでは、先頭にアイコンをつけて、DB、テーブルをわかりやすく表示するようにしました。

DBメンテナンスツールのTreeControl
DBメンテナンスツールのTreeControl

 TreeControlのコンストラクタの「tree-item-creation-proc」を設定することでアイコンを追加できます。

tree-item-creation-proc =
  {proc
    {x:TreeNode}:TreeItem

      let v_icon:any = null

      {switch (x asa MyTreeNode).icon-type
        case my-tree-head do

          set v_icon = null

        case my-tree-db do
          set v_icon =
            {DefaultPixmapTreeIcon
              {Pixmap.from-url {url "../../default/images/db.gif"}}
            }
        case my-tree-group do
          set v_icon =
            {DefaultPixmapTreeIcon
              {Pixmap.from-url {url "../../default/images/group.gif"}}
            }
        case my-tree-table do
          set v_icon =
            {DefaultPixmapTreeIcon
              {Pixmap.from-url {url "../../default/images/tbl.gif"}}
            }
        else
          set v_icon = null
      }

      {return
        {DefaultTreeItem
        x,
        icon = v_icon
      }
    }
}

 ノード選択のイベントも取得できるので、DBとテーブルの情報を一括で取得するのではなく、DBノードが選択されたときのイベントで、そのDBにあるテーブルを取得して下位ノードに表示するようにして初期起動を速くしています。

2.RecordGrid

 こちらはVisual BasicやDelphiにあるようなグリッドコントロールです。一覧表示ができ、見出し列をクリックするとソートすることもできます。

RecordGridコントロール
RecordGridコントロール

 RcordGridはデフォルトではグレーで地味な感じですが、これもプロパティで変更できます。

RecordGridの見た目を変えるプロパティ
{RecordGrid
  grid-line-color = "#758294",||色の変更
  font-size = 10pt,
  alternate-row-background = "#E1E1E1",||一行おきの色の変更
  select-current-record? = false,||行の選択を不可に
  cells-take-focus? = false ,||セルの選択を不可に
  width = 500,
  height = 300,
  header-options =
    {RecordGridRowOptions
      background = "#B0D0FF",halign = "left"},||カラムヘッダーの色の変更
      background="white",||色の変更
      display-navigation-panel? = false,||ナビゲーションバー非表示
      display-record-selectors? = false||データセレクター非表示
    }
}

 通常は、テキストの表示に使いますが、グリッド内にコントロールをのせることもできます。

チェックボックスを表示したRecordGrid
チェックボックスを表示したRecordGrid

 上記の方法でDBメンテナンスツールのデータ一覧表示を行っています。

DBメンテナンスツールのRecordGridコントロール
DBメンテナンスツールのRecordGridコントロール

まとめ

 ツリーとグリッドの2つを組み合わせることで、ローカルアプリケーションと同じ操作感を実現できました。Curlには、ツリーやグリッド以外にも質の高い標準コントロールが揃っていますし、カスタマイズもしやすいので、ユーザーのイメージを簡単に実現できます。これらを活用することで、従来のWebシステムでは実現が難しかった画面を、あまり時間をかけずに作成できます。

 次回は表示パフォーマンスについてです。大量のデータを取得するSQLを発行すると、どうしても表示に時間がかかってしまいます。これを改善する方法を説明していきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3281 2008/11/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング