|
【51CTO.com限定特集】ゲスト紹介 Luo Guo氏は、オープンソースフレームワークTinyの創設者です。J2EEとアプリケーション開発プラットフォームを専門とし、幅広い専門知識を有しています。モジュール性、メタデータ、テンプレートエンジン、データベースのパーティショニングとテーブル、SOAといった分野において、豊富な実践経験を有しています。多くの失敗から学び、多くの失敗を積み重ね、豊富な経験を積んできました。
羅国氏は、余暇にはオープンソースソフトウェア関連の活動に熱心に取り組んでいます。ソフトウェアのオープンソース化に取り組む傍ら、多数の技術ブログを執筆し、問題、原理、実践について詳細かつ分かりやすく解説しています。 彼はよく「優れたソフトウェア設計とは、評価されるものである」と言います。優れたソフトウェアアーキテクチャはシンプルでなければならないと彼は考えています。 以下は、51CTO 編集者からのいくつかの質問に対する Luo Guo 氏の回答であり、読者のためにまとめたものです。 1. TinyFramework を開発しようと思ったきっかけは何でしたか? TinyFrameworkを開発する前、私は社内の開発プラットフォーム開発を主導していました。しかし、会社の体制上、開発は社内要件や標準に厳密に従う必要があり、様々な側面のバランスを取る必要がありました。こうしたバランスがフレームワークに深刻なダメージを与える可能性がありました。よりバランスの取れた開発プラットフォームの構築を目指し、手続き型プログラミング、モジュール設計、データベースのパーティショニング、テーブル作成といった、小規模でトピックに沿った検証から始めました。検証範囲が広がり、より多くの分野をカバーするようになったため、最終的にオープンソースフレームワークの開発を決意しました。 したがって、ソースを遡って、自分のアイデアのいくつかを検証することが当初の意図でした。 2. TinyFrameworkは最近バージョン2.0をリリースしました。この新バージョンにはどのような新機能が含まれていますか?1年にわたる開発の中で、印象に残るエピソードはありますか? TinyFramework はエンタープライズ レベルの開発プラットフォームとして設計されているため、方法論、設計哲学、開発システム、設計原則、エコシステム、モジュール化、ホット デプロイメント、水平スケーリング、メタデータなどの非機能要件について広範な調査と実践が行われています。 もちろん、機能要件の面でも多くの進歩がありました。Tinyフレームワークは非常に多くの機能をカバーしているため、ここでは代表的なものをいくつかご紹介します。 ◆ TinyDBRouter (データベース パーティショニングとテーブル分離) : JDBC レイヤーに基づいて実装されており、SQL92 仕様に基づくさまざまなデータベースの透過的なデータベース パーティショニング、テーブル読み取り/書き込み分離、およびその他の水平スケーリングをサポートできます。 ◆ TinyTemplate (テンプレート エンジン) : Velocity に似たテンプレート エンジンですが、より強力な機能を備えており、Velocity ではサポートされていない多くの機能が追加され、Velocity の約 4 倍の速度で実行されます。 ◆ TinySqlDSL (データベース開発フレームワーク) : ドメインベースクエリ言語 (DSL) をベースにしたデータベース開発フレームワークです。SQL を記述するのと同じような方法で Java でデータベースプログラミングが可能になり、データベースと Java のレイヤーを統合する際に発生する問題 (iBatis のようにレイヤーを分離する、Hibernate の HSQL のように全く新しい言語を導入する、Java で大規模な SQL 連結を実行するなど) を効果的に解決します。もちろん、データベース開発には多くのソリューションがあり、それぞれに長所と短所があります。DSL アプローチは実装方法の一つに過ぎず、長所と短所が存在します。 ◆ TinyUI(インターフェースエンジン) :Webアプリケーション開発におけるモジュール化、JS、CSS、および各種静的リソース管理の問題を解決します。主に、静的リソースのJARパッケージ化、CSSのマージ、パッケージ化、圧縮、JSのマージ、パッケージ化、圧縮、UIモジュール間の依存関係といったシステム的な問題に対処します。 ◆ TinyStudio (統合開発環境) : ビジュアル インターフェイス デザイン、ビジュアル ワークフロー オーケストレーション、テンプレート エンジン エディター、コード ジェネレーター、サービス エディター、メタデータ エディター、およびデータベース デザイナーを提供します。 3. 通常、TinyFramework プロジェクトとコミュニティをどのように管理していますか? 初期段階では、フレームワークがまだ初期段階にあるうちにリリースしたくなかったため、あまり知られていませんでした。コミュニティや関連ウェブサイトへのリリースは、開発が完了し、プロジェクトチーム内で徹底的に検証された後にのみ行いました。私たちは、おおよそ以下の視点からプロジェクトとコミュニティを維持してきました。 ◆コードはOpen Source China Gitリポジトリ(https://git.oschina.net/tinyframework/tiny)でホストされています。現在、ウォッチリストは294件、スターは453件、フォークは361件です。 ◆ Tiny ドキュメント wiki を構築: http://www.tinygroup.org/confluence/display/TF。Tiny ドキュメントは 900 ページ以上あり、設計、実装、例、実践などを網羅しており、現在 1 日あたり約 1,500 回のアクセスがあります。 ◆ Tinyコミュニティを作成:http://bbs.tinygroup.org。Tinyコミュニティは、Tinyに関するコミュニケーションと情報交換を目的とした、新たに立ち上げられたプラットフォームです。 ◆小規模なディスカッションQQグループ(228977971)が作成されました。このQQグループは、技術情報の純度を維持するために、比較的厳格な管理アプローチを採用しています。現在、1000人以上のユーザーが参加しています。 前述のプロジェクト関連コミュニティ、ブログ、QQグループ、その他のチャネルを通じて、JavaフレームワークやTinyの幅広い愛好家の方々と活発な交流と情報交換を行ってきました。学習者、参加者、コミュニケーター、ユーザーなど、どなたでもご参加いただけます。皆様に恩恵がもたらされたことを願っています。同時に、私たち自身もこのプロセスから大きな恩恵を受け、オープンソースプロジェクトへの理解を深めることができました。 4. TinyFrameworkの利点と特徴は何ですか?特別な技術や革新的な技術は使用されていますか? ◆デザインコンセプトがデザイン目標を決定する 柔軟な使用方法:フレームワーク全体を使用することも、一部または一部のみを使用することもできます。Tinyの開発者は、完全なフレームワークは多くの部分で構成されている可能性があると考えていますが、実際のアプリケーションのユーザーにとっては、その機能の一部しか必要としない場合があります。フレームワークは、ユーザーがメニュードリブンで使用できるようにする必要があります。これにより、必要な機能がごくわずかである場合に、他の多くの機能を導入する必要がなくなります。 学習コストが低く、簡単に始められる: フレームワークの学習コストは非常に低くなければなりません。そうすることで、ユーザーはより簡単に始められるようになり、学習の難しさによって学習曲線が急すぎたり長すぎたりすることがなくなります。 コアの安定性維持:Tinyフレームワークは、非常に高い安定性とセキュリティ要件が求められるアプリケーション環境での使用が求められます。そのため、安定性はフレームワーク開発者にとって最優先事項です。コアコンポーネントには、完全に検証され、広く使用されているサードパーティ製パッケージのみを使用しています。 資産の蓄積可能性: 知識は簡単に蓄積できる場合にのみ、使用することで真に強化されます。 ◆相反する目的を解決するための設計原則と戦略 構成よりも規約を優先する原則 - COC 同じことを繰り返さない - DRY 減算の原則: 減算の原則は私たち自身が提案したもので、プログラマーのために物事を簡素化することを目的としています。 モジュール化の原則:モジュール化は、ソフトウェアの開発、統合、展開、保守において重要な役割を果たし、潜在的に大幅なコスト削減につながります。そこで、モジュールに関連するすべてのコンテンツをグループ化できる「ビジネスユニット」という概念を提案します。 自動アセンブリの原則: Tiny フレームワークの構築プロセス全体を通じて、統合プロセスの自動アセンブリに大きな重点が置かれており、ユーザーは何もする必要がなく、フレームワークが自動的にコンポーネントを統合します。 部下が上司に従う原則: Tiny フレームワークはフレームワーク レベルで制限を課し、部下が上司に従うことを要求します。 単一原則: 単一原則は、モジュールが解決すべき問題のみを解決することを保証する制約を適用します。これにより、異なる問題を同時に解決することによって発生する混合問題を回避し、不適切な依存関係やテンプレート参照も回避します。 集中型設定原則:Tinyフレームワークの設定には、多くの取り組みを行ってきました。一つはCOC方式で、設定を行わない場合はシステムのデフォルト値をそのまま使用できます。もう一つは集中型原則で、手動設定が必要なコンテンツを一元管理し、統一化します。そして三つ目が、手動操作を必要としない設定は、パブリッシャーのリリースアイテムの一部としてJARパッケージに統合されるというものです。 #p# ◆革新的な技術の応用例 SOA:Tinyのサービスは一度開発すれば、どこでも利用できます。つまり、一度サービスを開発すれば、RMI、Webサービス、JSON、XMLなど、想像もつかないような様々な方法でサービスを呼び出すことができます。 サービスレベルの拡張性:Tinyの開発仕様に準拠しながら、アクセス層とサービス層の水平方向の拡張を容易に実現できます。つまり、処理能力が不足している場合でも、既存の運用環境を変更することなく、マシンを追加するだけで処理能力を増強できます。 モジュール化技術:Tinyのモジュール設計哲学は、あらゆるものをモジュール化できるというものです。つまり、JSPファイルも含め、すべてのファイルをJARファイルに配置できるということです。モジュール化技術により、モジュールを容易に分離・再利用できます。 セルフアセンブリ技術:Tinyのセルフアセンブリ設計哲学は、すべてのモジュールをすぐに追加して使用し、削除して消滅させることです。つまり、他の開発者のコンポーネントを使用する場合は、Maven依存関係として追加するだけで済みます。不要になった場合は、Maven依存関係を削除するだけで済みます。これにより、統合に関連する作業負荷が大幅に軽減されます。 ホットデプロイメント技術:ホットデプロイメントにはOSGiなど多くの手法がありますが、いずれの手法もある程度強い依存性、つまり侵入性を持っています。Tinyのホットデプロイメント機構ははるかにシンプルで、通常の方法でJARファイルを作成し、Bundle宣言ファイルを設定するだけです。実際のアプリケーションでは、Bundleファイルとしても通常のJARファイルとしても実行できます。 UIMLテクノロジー:UIMLはUnified Interface Description Language(統一インターフェース記述言語)の略です。この機能と付属のビジュアルインターフェース設計ツールを組み合わせることで、どこでも使用できるインターフェースの開発が可能になり、「一度開発すれば、どこでも使える」という目標を達成できます。 AOP バッファリング フレームワーク: バッファリングをビジネス コードから効果的に分離し、バッファリング スキームを透過的に切り替えて、バッファ関連コードの作成にかかる開発コストとリファクタリング コストを大幅に削減できます。 ドキュメント生成フレームワーク:Tinyの開発標準に従って開発されたこのフレームワークは、多くのドキュメントをツールを通じて自動生成できます。ドキュメントとコード間の不整合の問題がなくなり、ドキュメント作成にかかる時間も大幅に短縮されます。 5. TinyFrameworkは現在どのように使用されていますか?成功事例をいくつか教えていただけますか? TinyFrameworkはリリース当初から、主に社内で広く普及・活用されてきました。一方で、既に数多くのエンタープライズおよびインターネットレベルの製品がTinyをベースに開発されており、数十社のお客様にご利用いただいています。オープンソース化以降、多くのチームや企業から、Tinyの適用において貴重なフィードバック、提案、そして要件をご提供いただき、中には私たちに代わってプルリクエストを直接送信してくださった方もいらっしゃいます。この1年間で、Tinyのコミュニティ環境はますます充実しており、2015年には社外ユーザー数が大幅に増加することを期待しています。 6. 開発チームについて簡単にご紹介いただけますか?普段はどのようにコミュニケーションを取り、協力しているのでしょうか? TinyFramework開発チームは安定したメンバーで構成されています。熱心なメンバーを募って参加を呼びかけることも試みましたが、実際の結果は芳しくありませんでした。もちろん、これには様々な理由があり、一部の参加者が継続しなかった理由も十分に理解しています。 チームメンバー間の主なコミュニケーション方法は次のとおりです。 ◆チームビルディング:昨年は20回以上も食事を共にし、様々な話題について話し合いました。家族の誕生、技術の進歩、製品の受賞など、理由は様々でした。しかし、最も多かったのは深刻なバグ、設計上の欠陥、開発に影響を与えるコードの提出など、技術に関連する出来事でした。こうした食事と議論は、私たちの技術スキルを向上させるだけでなく、こうしたエラーの根本原因を理解し、同様の問題が再発しないようにするのにも役立ちました。 ◆ Git での Issue 管理: 私たちのチームには「あなたの発言は重要ではない」という格言があります。要件であれバグであれ、管理者による一元的な調整と管理のため、すべては Issue セクションに入力する必要があります。Issue セクション内では、Issue の登録、注釈付け、解決、追跡、そしてクローズといった管理がすべて必要です。 オンラインでもオフラインでも、コミュニケーションは私たちのチームの協力と調和のとれた発展に重要な役割を果たし、お互いを補完してきました。 7. オープンソースについての理解と、中国におけるオープンソース技術および製品についての見解を教えていただけますか? これはかなり広範な質問なので、以前のブログ投稿の内容を使用して、オープンソースに関する私の理解についてお答えします。 収益に関して言えば、オープンソースプロジェクトがすぐに収益を生み出すと期待している人のほとんどは失望するでしょう。一般的に、オープンソース製品が構想から開発、収益化、そして最終的に収益バランスを達成するまでのプロセスは、長く困難なものです。 オープンソースが収益を気にしないのであれば、そもそもなぜオープンソースなのでしょうか?おそらく次のような理由があると思います。 ◆精神的な満足を得るため 例えば、素晴らしい製品を開発したとしても、最初は売れ行きが悪く、自分だけに留めておいても達成感はあまり得られないかもしれません。しかし、オープンソース化して誰でも利用できるようにすれば、開発者はより大きな達成感を得ることができます。 ◆社会的認知を得る 心を開くことで、かなりの社会的認知が得られ、他の人と協力する機会が得られ、さらに良いキャリア開発や就職の機会が得られる可能性もあります。 ◆収集要件 一人で何かをするには限界があります。たとえあなたが優れた才能を持っていたとしても、他の人に無料で使わせることで、彼らは様々な意見や提案をくれ、製品をより豊かにし、改善していくことができます。 ◆ユーザーテスト 何かを作った時に、それが良いものかどうかさえわからない時があります。でも今は多くのユーザーが使ってくれているので、テストに役立っています。 ◆ユーザー基盤の獲得 製品自体には価値がないように見える場合もありますが、ユーザーベースが拡大するにつれて、収益を生み出す可能性が高まります。これは潜在的なユーザーを育成することにもつながります。無料で利用する人が増えれば増えるほど、より良いサービスや製品、あるいはカスタム開発のためにお金を払う可能性が高まります。 ◆マーケティング戦略 製品自体は非常に優れていました。オープン化によって市場認知度が向上し、ブランド認知度が向上し、その後のプロモーションの基盤が築かれました。同時に、内部実装を可視化することで、ブラックボックスからホワイトボックスへと変化し、人々が自信を持って選択できるようになりました。 もちろん、その一部、あるいは全てに当てはまるかもしれません。つまり、オープンソースは長期的なコミットメントと冷静で忍耐強い姿勢を必要とする難しい選択なのです。 したがって、オープンソースは一種の精神修行です。この段階では、あなたは何の功績もない普通の人かもしれませんし、ある程度の功績を持つ仏弟子かもしれませんし、偉大な功績を持つ尊者かもしれませんし、あるいは最も正統で至高の仏陀かもしれません。 次に、国内のオープンソース技術と製品に関する私の質問にお答えします。 実際、オープンソースプロジェクトの発展は螺旋状の軌跡を描いています。全体として、中国におけるオープンソースへの理解は、単に無料で利用するという原始的な概念から、より高度なレベルへと進化しています。一般的に、中国のオープンソース技術と製品はまだ開発の初期段階にあります。例えば、単にコードを公開するだけでは、その後のコミュニティ構築やエコシステム形成といった制約が伴わないことがよくあります。しかし、中国にはオープンソース製品が数多く存在するため、優れたオープンソース開発者や製品がますます増えており、これは量的変化が質的変化につながるという客観的な法則に合致しています。これらの優れたオープンソース製品と比較すると、Tinyフレームワークはまだ未成熟であり、埋めるべき大きなギャップがあります。しかし、私たちのチームのモットーである「大きく考え、小さく始め、素早くスケールアップ!」を真摯に実践し続ければ、必ず優れたオープンソース製品の一つになれると信じています。 Tinyコミュニティのフォローをお待ちしております:http://bbs.tinygroup.org。Tiny関連のトピックについては、QQグループ(228977971)にご参加ください。 |