| トシャレコム エルエルシー | |
| 説明: | |
| 形式: | RSS 2.0 |
| http://10share.com/rss.xml | |
| 最新の投稿 | |
| Drupal 6.16がリリースされました Tue, 09 Mar 2010 00:40:36 +0000 本当は、tipsの続きでサブテーマについて実験してみようと思っていたのですが、さる2010年3月4日(日本時間)に6.16がリリースされたのでそちらのアップデートの確認作業に時間がとられてしまったので、Fusionを遊んでみるのは少し延期になりました。さて、この6.16は重大なセキュリティフィックスがあるとのことで、早めに対応した方が良いでしょう。セキュリティフィックス一つはインストール時にクロスサイト・スクリプティングの危険があります。これはインストールされていないサイトでのみ影響がある問題です。次にdrupal_goto()のフィッシング・アタックに使わえる可能性があるというもので、これはサイト運営者にとってはかなり頭の痛い問題です。次にLocaleモジュールのクロスサイト・スクリプティングの問題です。大抵の日本のサイトは使っていると思いますので、影響必至です。最後にブロックされた状態のユーザのセッションを復活できるという問題です。セッションを閉じた状態でユーザをブロックした場合に発生するそうです。その他重要な変更点lock.incという新しいロック機能サブシステムがサポートになりました。これは新しいテーブル「semaphore」が必要になるため、update.phpを実行しないと「テーブルが存在しない」というエラーが発生し続けることになります。※新規インストールの場合は、関係ありません。あと、.htaccessが修正されました。パッケージ化インストールプロファイル用の.make ファイルを隠すための修正なので、.htaccessを修正して使っている場合は置き換えでなく該当行を修正する方が安全でしょう(修正は1行だけです)。新しいlock.incの導入は少々怖いと思う方は、セキュリティ対応だけでも急いだ方が良いでしょう→6用のパッチ |
|
| Drupalのtipsを少し紹介 Thu, 04 Mar 2010 05:39:57 +0000 いくつかのDrupalサイトを運用してみるとわかるのですが、「コンテンツ毎にちょっと違うレイアウト」を試したいという要望が結構あります。でも、テーマの骨格となるブロック設計というのはテーマをインストールした時に決まってしまいます。UIだけでは、このブロックを変更できません。今日は、これを解決する方法をいくつかご紹介します。PanelsモジュールDrupal のブロックレイアウトをCSSやテーマファイルを変更せずに、レイアウトを自由に作り替えられる優れたモジュールです。非常に強力です。Skinrモジュールリンクカラーやちょっとしたレイアウト修正を行うのにわざわざテーマのCSSを修正したりするの面倒ですよね。このモジュールをそれをUIから定義できるようになります。先のPanelsモジュールやViewsにも使えるので、これ便利かも!って感じです。Fusionこれまだ発展途上なんですけど、Drupal UIからレイアウトを調整できるようなベース・テーマを開発するっていうプロジェクトなんです。私もこれに参加してみましたので、また進捗あったらブログに書きますね。 |
|
| Amazon S3 を使いたい Thu, 18 Feb 2010 08:04:32 +0000 Amazon S3について少し研究したいと思います。昨年からAmazonのウェブサービスについて、EC2やRDSといった機能については、ちょくちょく調べているのですが、今回はAmazon S3です。じゃ、S3とは何かというと、Amazon Web Services LLC(以下、AWS)が提供しているインターネット上で使えるストレージ・ウェブサービスの事です。と書くと、既にApple社のmobileMeのiDiskと比較してしまうと思います。iDiskとの違いは、iDiskはWebDAVという共通技術を元に作られているいわば「ファイル共有サービス」です。S3はITサービス開発者の視点からみると、もうちょっと面白くて、「ファイル共有を実現するための機能サービス」といったところでしょうか?なので、AWSそのものが、iDiskのような洗練したインタフェイスを提供していません(コマンドラインはあります)。ではどういった機能が提供されているのでしょうか?1バイトから5ギガバイトまでのデータを含んだオブジェクトの書・読込や削除が行える。オブジェクトは制限なしに保存できる。それぞれのオブジェクトは、バケットとして保存され、独自に開発者が割りあてたキーを使って取り出せる。バケットは、複数のリージョン中の一つに保存できる。送信遅延やコスト最小、アドレス規制の必要性によって最適なリージョンを選ぶことできる。一度あるリージョン上に保存されたオブジェクトは、自分で移動させない限りそのリージョンから絶対に出て行くことはありません。認証メカニズムによって認証無しアクセスからデータの安全性を守るために提供されている。オブジェクトは、保護か公開のどちらかで作られ、権限は特定のユーザのみ持つようにできる。インターネット上の開発キットとの互換性を持った標準ベースRESTとSOAPインタフェースが使える。プロトコルや機能的なレイヤーが簡単に追加できるように柔軟な設計になっている。標準のダウンロードプロトコルは、HTTPである。BitTorrent™ プロトコルのインタフェースが、大きな規模のディストリビューション向け低コストに提供できる。 将来的にはもっとインタフェースが追加される。と、どちらかというとインフラ系のエンジニアより開発系エンジニアに向けて様々な機能が提供されているといっても良いでしょう。まず、1番目の「オブジェクトは制限なしに保存できる」は、サーバストレージは常に最も大きな問題であるので、まずこれを真っ先に解決してくれるのはありがたいです。次にセキュリティ面ですが、5番目の認証メカニズムがあるため、アップロード制限だけでなく取り出し制限も簡単に行えます。また、「公開」機能もあるので一般向けサービス用にも使えるようです。3や4番目のリージョン問題はまだ日本に拠点が無いので、何とも言えませんが、いずれ日本にも拠点ができるでしょう。6や7番目を見てもらえばわかるのですが、取り出しや再利用が簡単なんです!WebDAVしか使えないiDiskと違って、ウェブアプリケーションには非常に柔軟に対応してくれるのです。実際に使ってみないとよくわからないと思うので、次回はこのAS3を使ってアップロード、ダウンロードをやってみようと思います。 |
|
| Links for 2010-02-17 [del.icio.us] Thu, 18 Feb 2010 00:00:00 PST 世界で勝つ 強い日本企業のつくり方:利用契約の検討——グローバルクラウドで失敗しないために(前編) (1/2) - ITmedia エンタープライズ 前々から気になっていたので、勉強しよう 世界で勝つ 強い日本企業のつくり方:越境するデータの管理——グローバルクラウドで失敗しないために(後編) (1/2) - ITmedia エンタープライズ しっかり、情報を集めておこう |
|
| Amazon RDS を使ってDrupal を動かそう!! Mon, 15 Feb 2010 08:07:14 +0000 AWSのMySQLベースのリレーショナル・データベースを使ってDrupalをインストールしてみました。AWS RDSのサービス申込をしてから、Javaベースのコマンドを用意します。こちらからダウンロードできます。これを端末にインストールします。インストールはここにある通りやれば簡単に動作させることができます。このコマンドはEC2のコマンドツール同様にEC2のインスタンスマシンにインストールする必要はありません。手元のWinやMacOSでもまったく構いません。コマンド・ツールのインストールと設定についてはここに詳しいので、ここではデータベースの作成方法とアクセスするまでについてメモしておきます。データベースインスタンスの作成次にDB専用のインスタンスを立ち上げるのですが、このコマンドが#rds-create-db-instance tosharecomudb --allocated-storage 20 --db-instance-class db.m1.small --engine MySQL5.1 --master-username tosharecomu --master-user-password tosharecomu --db-name tosharecomu001 --headersこれで簡単に、20GBのtosharecomudbという名前のMySQL5.1ベースのデータベース・インスタンスがスモール(Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1 ECU), 64-bit platform)をベースに作られます。さらに、データベースにアクセスするためのユーザとパスワード'tosharecomu'とデータベース'tosharecomu001'が作られます。作成に成功すると次のような応答があります。DBINSTANCE DBInstanceId Class Engine Storage Master Username Status Backup Retention PendingCredentialsDBINSTANCE tosharecomudb db.m1.small mysql5.1 20 tosharecomu creating 1 **** SECGROUP Name Status SECGROUP default active PARAMGRP Group Name Apply Status PARAMGRP default.mysql5.1 in-syncまだ、作成中(creating)のステータスなのでどこにアクセスしたら良いかわかりません。しばらくして、#rds-describe-db-instances --headersを実行して状態を確認します。DBINSTANCE DBInstanceId Created Class Engine Storage Master Username Status Endpoint Address Port AZ Backup RetentionDBINSTANCE tosharecomudb 2010-02-15T06:44:20.788Z db.m1.small mysql5.1 20 tosharecomu available tosharecomudb.cdsfas9rufpivtr.us-east-1.rds.amazonaws.com 3306 us-east-1b 1 SECGROUP Name Status SECGROUP default active PARAMGRP Group Name Apply Status PARAMGRP default.mysql5.1 in-syncここに利用状態が可能(available)に変わっています。これでデータベースにアクセス出来る状態になります。これでひとまず準備完了です。接続セキュリティを以下の方法で設定します。 rds-authorize-db-security-group-ingress default --cidr-ip 0.0.0.0/0 --headers これで全てのIPアドレスからアクセスできるようになります。本番で使うのであれば、CIDRの部分をサーバのIPアドレスに変えて下さい。このコマンドも即時適用ができないので、暫く待ちます。※確認する方法は、rds-describe-db-security-groups default --headers を使います。ここまで来たらあとは、通常のMySQLと同じ方法で接続してユーザ追加、テーブル作成が可能です。mysql -h tosharecomudb.cdsfas9rufpivtr.us-east-1.rds.amazonaws.com -u tosharecomu -p実際にDrupalに使ってみた今回はレイテンシの少ないWest(カリフォルニア)に立ち上げたEC2のインスタンスから接続してみましたが、スモールサイズのDBではやはり少し重く感じます。memcacheの利用で閲覧速度には多少改善できますが、実用に耐えるレベルでは無いようです。mysqlコマンドレベルではそれ程速度の違いは感じられないのですが、実際にDrupalと連動させてみると使えるレベルにはならないようです。あと、現在、EC2のインスタンスと違いEast/Westの選択ができないので恐らくEastしか使えないのかと思います。まだ1GB以上使っているような大規模なDrupal運用は当分なさそうなので、コンテンツ配信に利用できそうなS3の方をもう少し研究いこうかと思います。2010-02-16追記:先にDBを作って、RDSと同じゾーン(二回とも東)にEC2インスタンスを作って接続したら、ちゃんと内部接続になってレイテンシーの問題が解決されました。 |
|
| Drupalの利点 Wed, 10 Feb 2010 08:38:54 +0000 今年は少しずつブログを書いていくつもりでしたが、やはり2週間以上間が空いてしまいました。弊社が管理運営をお手伝いしているウォルナッツさんのブログはほぼ週に5本以上のブログを書いています。これって本当に凄いことなんですね。さて、今年の初めに「Drupalってここが嫌」は書いたのですが、あんまりDrupalの利点を書いていなかったと思いますので、今日は少しDrupalの利点について書いてみたいと思います。単純な構造で強力なツールDrupalのコアそのものは、非常に単純な構造をしていてます。コード的には他のCMSと比べると非常に小さいと思います。しかし、構造が単純なだけに一度拡張をするぞ!ってなるとかなり柔軟なツールになるのです。なぜなら、Drupalのコアを突き詰めるとノードというウェブページを抽象化したデータ構造しか無いといっても過言がないぐらいミニマムな作りなのです。この単純さが多くのモジュールを生む結果になっていると思います。また、タイトルと本文だけという形に、究極までウェブを抽象化しているので複雑なコンテンツを作ろうとしたときに障害が逆に少ないんですね。これが私がDrupalを選択した第一の理由です。複数言語での利用マルチリンガルなサイトを作るときにも簡単なんです。全てではないですが、「動物かんきょう会議」では日本語で作ったコンテンツをボタン一つで英語に切り替える機能を提供しています。静的なコンテンツでちょっとやれば作れることなので、見る側からすると何が便利なのかわからないかと思いますが、実はこれ編集側の話です。通常の編集ボタンの横に「翻訳」ってあるので、それを押すと英語や他の言語に翻訳がその場で行えるのです。しかも、使っている画像やレイアウトはそのままにです。メニューも多言語に対応した形で複数設定できるのです。実はこの機能は、実際にお客様からの要望で気がついたのですが、意外と使えるなと思う機能です。拡張モジュールの豊富さこれは本当にすごいです。お客様から要望を頂いて、「これ作らなきゃなぁ」って思って検索かけるとだいたいあるんです。なので、あまりカスタムなモジュールを作る必要が生じないのも素晴らしいところです。プログラムが好きな人に少し寂しいですけど、急なプロジェクトが多い場合は本当に重宝しています。セキュリティへの対応これも2ヶ月に1回程度のペースでセキュリティアップデートが提供されていて、その修正箇所や説明も詳しくて安心です。しっかりとしたセキュリティ検証が行われているのも魅力の一つです。 |
|
| Drupal 6のセッション管理(3) Wed, 20 Jan 2010 07:54:23 +0000 検討の結果、携帯電話端末のセッション管理をセッションIDをURLに埋め込むという方向で行こうと決定しました。ただ、デフォルトでの設定で動作しているDrupalのURLを見ると、PHPSESSION等というものが見あたらないと思います。Cookieでセッション管理を行うのがデフォルトだからです。まずは、セッションIDをURLに入れるところから始めましょう。Drupal のテーマを作ったことあるなら、すぐにリンクタグ(<a>)を作る場合、主に使う関数 l() を修正する必要があると考えると思います。しかし、前回のブログでも見たとおり、セッション・ハンドラーは独自に作り直していますが、セッション管理機構はPHPのものを使っていますので、これにそった形で修正を進めるのが良いと思います。まず、URLにセッションIDが付加されるようにしましょう。このセッションIDを「透過的なセッションID」といいます。PHPの方で自動的にリンクタグ等にもセッションIDが入らなくては使い物になりませんが、この辺もPHPが勝手にやってくれます。このオプションを設定するには、settings.php のsession.use_trans_sid の設定を'1'にしてやる必要があります。今回はCookieをまったく使わないでやってみるというのが目的ですので、settings.phpを以下のように設定しました。ini_set('session.use_cookies', 0); ini_set('session.use_only_cookies', 0); ini_set('session.use_trans_sid', 1); 簡単に設定できました。しかし、これだけではリンクタグとかに透過的なセッションIDを付加したURLが生成されませんので、その近くにあるリライト規則を追加します。settings.php:ini_set('url_rewriter.tags', 'a=href,area=href,frame=src,input=src,fieldset=');これでセッションIDがURLに付加されるようになったと思います。しかし、まだログインができません。何故でしょう?それの答えはここにありました。要約するとdrupal_goto()が、この透過セッションIDに対応しなくなったからなのです。セッション・フィクセーションの事を考えると当然の対応です。仕方ないので drupal_goto()関数を書き換えて対応するしかなさそうです。drupal_goto()は、includes/common.incにあります。該当する行を見ると確かにURLに新しくログイン後に発行されたセッションIDを付与するところがありません。function drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302) { if (isset($_REQUEST['destination'])) { extract(parse_url(urldecode($_REQUEST['destination']))); } else if (isset($_REQUEST['edit']['destination'])) { extract(parse_url(urldecode($_REQUEST['edit']['destination']))); } $url = url($path, array('query' => $query, 'fragment' => $fragment, 'absolute' => TRUE)); // Remove newlines from the URL to avoid header injection attacks. $url = str_replace(array("\n", "\r"), '', $url); // この辺に入れたらよいような・・・ // Allow modules to react to the end of the page request before redirecting. // We do not want this while running update.php. if (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update') { module_invoke_all('exit', $url); } // Even though session_write_close() is registered as a shutdown function, we // need all session data written to the database before redirecting. session_write_close(); header('Location: '. $url, TRUE, $http_response_code); // The "Location" header sends a redirect status code to the HTTP daemon. In // some cases this can be wrong, so we make sure none of the code below the // drupal_goto() call gets executed upon redirection. exit();}セッションIDを付加していないと言うことだけなら、単純にセッションIDを付加して、リダイレクトするだけで可能なのではということになります。その通りなんですが、そのパッチ(注意:古いのでそのままは使えません)はあります。何か、スマートじゃないですね。でも、 セッションIDを$urlに追加する文を上の赤字の箇所に加えると、確かにセッションIDを引継ぎながら移動できるので、ログイン問題は解決されます。if (ini_get('session.use_trans_sid') && session_id() && !strstr($url, session_id()) && !$_COOKIE[session_name()]) { $sid = session_name() . '=' . session_id(); if (strstr($url, '?') && !strstr($url, $sid)) { $url = $url .'&'. $sid; } else { $url = $url .'?'. $sid; } }注意:Drupal のセッション管理がどの程度セッション・フィクセーションに強いか確認してから実際に実装してくださいね。まだ、そこまでコードを追いきれていないので。 |
|
| Drupal 6のセッション管理(2) Tue, 19 Jan 2010 04:32:31 +0000 先日は、Drupalのセッション管理がどのタイミングで行われ、置き換えられそうだというところまでわかりました。今回は、携帯向けセッション管理を行うためにまず携帯のセッションってどうしているんだろうという事を知る必要があります。昔、少し調べた(Webアプリじゃなくて、ロードバランサー側の設計を担当しているときなんですが)時に「こんなんでセッション管理って言えるの?」って感じの仕様だったことを思い出して、色々とウェブサイトを漁ってみました。ここのドキュメントが詳しく解説していましたので、少しこの辺りの話は省きます。個体識別番号とかを使うと、キャリア毎にも若干違ったり、やはりPCサイトとの互換性やiPhone等のスマートフォンの台頭を考慮するとこの手法を使って一生懸命実装するのも、ばからしいと思うわけです。やはり、ここはURLにセッションを埋め込む方法を使いましょう。ということで、今日までに簡単に方針を決めて、明日から実際にコーディングに入っていきたいと思います。 |
|
| Drupal 6のセッション管理(1) Mon, 18 Jan 2010 04:14:21 +0000 先日のブログでも少し書いたけど、日本の携帯電話でDrupalは本当に使いにくい。閲覧だけなら、何とかなるのですが、やっぱり編集もしたいという要望も実際にあります。電子メールを使ったブログ投稿ならすぐにできそうですが、将来的にeコマースなどを実現しようと思うと、セッション管理周りはできるように拡張した方がやりやすい。そこでまずDrupalのセッションの管理方法についてコードハックしていきたいと思います。まず、Drupalのページがどうやって作られるか調べておく必要がありますね。bootstrap.inc を見ればわかるんだけど、設定の初期化データベース以外のキャッシュを取得データベース・レイヤーの初期化アクセスが禁止されているホストの判定と拒否セッション・ハンドリングを初期化bootstrap.inc と module.inc を読込み、複数のシステムを開始し、キャッシュからページを提供できるか試します。ページの言語を決定$_GET['q']に、リクエストのDrupal パスを設定Drupalを読込完了。という順番で実行されます。セッションのハンドリングは5番目なんですね。では、そのセッション・ハンドリングの生成って何しているのかっていうと、以下の通りです。require_once variable_get('session_inc', './includes/session.inc');session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy_sid', 'sess_gc');session_start(); つまり、セッション関連の関数を読み込んで、ハンドラーを定義登録して、セッションIDを生成しているだけなんですね。じゃ、このハンドラーを携帯用に作り替えれば済むんじゃないだろうかという発想ができるわけです。さらに、session.incを読み込むところに、わざわざvariable_getを使って独自に設定出来る余地を残しています。ということは、「1.設定の初期化」の時点で上書きしてしまえば、良いわけですから、Drupalコアをほぼ修正せずに何らかの新しいセッション維持方法を制作できそうですね。次回は、携帯電話のセッション管理に研究して、まとめてみます。 |
|
| Drupal ってここが嫌 Fri, 15 Jan 2010 06:10:56 +0000 Drupal をまるまる1年じっくり使いサービスを提供してみると、色々と弱点も見えてきます。ここのブログでは、弊社でサービスを提供しているのだから強みを中心に説明していくところなんでしょうが、やっぱりあまり過大評価しすぎるのもどうかと思うので客観的に評価してみることにしました。日本の携帯電話への対応悩ましい点は、やはり日本の携帯サイトへの対応の難しさでしょうか。海外では自動変換サービス等でDrupal から直接変換してくれるモジュールがあったりしますが、日本国内の「独自仕様向け」には使えません。Pdathemeなる自動テーマ変換ツールを使って簡単な携帯サイトを構築しましたが、ちょっと満足いくできにはいっていません。もっと細かいことをすると、やはり他の国産に比べるとコストがかかりそうです。殆どがテーマで解決するのですが、今度はログインセッションをCookieでしか扱っていないので、日本の携帯電話で使われている UserAgentや個体識別番号でセッションを維持する仕組みを作らなくてはなりません(たぶん、それ程難しい拡張では無いけど・・・)。 今年の研究テーマになりそうですね。英語が苦手な人には・・・Drupalは、全世界で使われていますが、主な言語は「英語」です。スペイン語やドイツ語のインタフェイスは比較的すぐに作られますが、「日本語」はまだまだ少ないです。なので、英語が苦手な人にはとっつきにくいかもしれませんね。日本語情報が少ない同じオープンソースのWordpressに比べると日本語情報が充実していないように思います。Joomla、Zen-Cartを使った時もそうでしたが、日本ではこの手のCMS関連の情報は本家で英語で得るのが一番っていう状況なようです。特に、ヨーロッパ語圏と日本語圏の発想の違いか、提案したお客様からはよく「mixiみたいなGUIが欲しい」っていわれるとつらいです。mixiのインタフェイスは日本ではデファクトスタンダードなので、致し方ないってところですが、毎回ちょっと軽いショックを受けます。意外と多いですよ、そういう依頼がくるのは・・・特にDrupalだけでなく、phpBB等のフォーラム形式もよくお客様から使い方が分からないと言われました。やっぱり、日本だと2chを代表する「掲示板」形式が一般的なので取っつきにくいのかもしれませんね。拡張モジュールは、たくさんありますが・・・Drupal最大の特徴であり、強みであるサードパーティ・モジュールですが、これにも困った事があります。ある程度の基準や設定・コードの記述の仕方まで決まっているのですが、インストール方法から設定が作者でバラバラなんです。それと、使い方があまり詳しく記載されていなかったり、デモが無いものが多いです。最終的にはコードを解析して、使い方を習得しているんですが、少々効率が悪いです。最後にと、まだまだ改善していきたい部分はありますが、CMSとしては非常に強力で、沢山の可能性を秘めていると信じています。 |
|






