SlideShare a Scribd company logo
Ruby/Rails/mongoDBで動作する中・大規模サイト向けCMS「シラサギ」のハンズオン
自己紹介
ウェブチップス
1. 野原
2. 伊藤
3. 中野
ハンズオン 目次
1. シラサギの紹介 [10min]
2. ハンズオンの導入 [20min]
3. ハンズオンの環境構築 [20min]
4. ハンズオン [60min]
1. 開発サンプル紹介
2. 準備
3. ブログページ作成
4. 天気入力フォーム作成
5. 一覧フォルダー作成
シラサギの紹介
目次
1.会社概要
2.シラサギについて
3.CMSアプリケーション
4.開発コミュニティ
会社概要
会社名
設立
資本金
所在地
役員
株式会社ウェブチップス
2013年9月20日
500万円
〒770-0872 徳島県徳島市北沖洲三丁目6番58号 石本ビル202
代表取締役社長CEO 野原 直一
技術担当取締役CTO 谷沢 和寿
6名(役員含む)
オープンソースソフトウェア開発事業
オープンソースソフトウェアを使った導入・カスタマイズ事業
オープンソースソフトウェアのサポート事業
オープンソースソフトウェアを使ったクラウドサービス事業
社員数
事業内容
目次
1.会社概要
2.シラサギについて
3.CMSアプリケーション
4.開発コミュニティ
「シラサギ」という名称の由来
サギ科の鳥のうち、全身の羽毛が白いものを「白鷺(しらさぎ)」と呼びます。
徳島県では1965年10月から「シラサギ」を県の鳥に指定しています。
サギ類は、他の種類のサギたちと一緒に「鷺山(さぎやま)」という巣を作り、
繁殖するという特徴があります。
その様子が、様々な企業と技術者でコミュニティを形成し、ソフトウェアを
開発していくというコンセプトと一致したためこの名称を採用しました。
「シラサギ」は、みんなで育てるオープンソースソフトウェアです。
MITライセンス
誰でも自由にカスタマイズできます。
誰でも自由にフォークできます。
拡張機能を公開するかどうかを自由に選べます。
Webアプリ開発プラットフォーム
CMSですが、コアの設計は汎用SNSになっており、Webアプリ開発プラットフォーム
として利用できます。
将来的にグループウェア、SNSなどの様々なアプリケーションの開発ができます。
モデルアドオン設計
下記をカプセル化して任意のコレクションに
取り付けられます。
・DBのフィールド
・データ検証や保存ロジック
・編集画面
・詳細画面
アドオンをうまく使うことで、モジュールの
肥大化を抑えられます。
結果、ソース管理が非常に楽になります。
MongoDB
NoSQLであるMongoDBを採用し、高速化を
実現しています。
公開されているフォルダ・ページには、リレー
ションによる関連付けはなく、それぞれがファ
イル名(URL)を保持しています。
そのため、MongoDBの強みである前方一致
検索のパフォーマンスを最大限に引き出せ
ます。そのため、任意のフォルダ内の検索も
非常に高速かつ効率的に行えます。
「シラサギ」の動作環境
対象 バージョンなど
OS CentOS 6,7 64bit or Ubuntu Server 14.04LTS
Webサーバ
アプリケーションサーバ
nginx or Apache
+
Unicorn
DBシステム MongoDB 3.0
Ruby 2.2.2
Ruby on Rails 4.2.3
常に最新のバージョンに適用しています。
目次
1.会社概要
2.シラサギについて
3.CMSアプリケーション
4.開発コミュニティ
CMSアプリケーション
シラサギのコアとなる部分の設計は汎用SNSになっており、Webアプリ開発プラットフォーム
として利用できます。
現在は、そのプラットフォーム上でCMSアプリケーションが稼働しています。
初期データ
市町村向けの自治体サンプルデータ、企業サンプル
データを初期データとして提供しています。
インストール時に初期データを切り替えられます。
今後も様々なサンプルデータを提供していきます。
・子育てサイトサンプル
・大学サンプル
・県向け自治体サンプル
など
初期データを使ったホームページ作成(1)
初期データ「企業サンプル」 企業向けホームページ
ロゴ
写真
色
レイアウト
を調整
初期データを使ったホームページ作成(2)
初期データ「自治体サンプル」 自治体向けホームページ
ロゴ
写真
色
レイアウト
を調整
拡張プラグイン
独自の拡張プラグイン機能「egg(エッグ)」があります。
モジュールとして追加したコンテンツのプラグイン化、デプロイが行えます。
地図データベース機能
表示項目
検索条件
などを調整
バリアフリーマップ
拡張プラグインを使ったウェブシステム開発
マルチテナント対応
同一データベース同一スキーマ方式を採用しています。
これにより管理者の運用コストを軽減できます。
マルチテナントを使ったサービス提供
シラサギのクラウドサービスを立ち上げ、同じコンテンツサイトを横並びで構築していく。
例:徳島県オープンデータポータルサイトと各市町村オープンデータサイト
Ajaxパーツ
即時反映と低負荷を実現します。
ページは、検索クローラーを想定して静的HTMLファイルを書き出します。
レイアウト、記事リストなどのパーツは、動的表示を選択することで最新の情報を表示。
マルチデバイス対応
公開画面及び管理画面は、PC、スマホ、携帯、
タブレットなど様々なデバイスに対応します。
公開画面
管理画面
多言語対応
管理画面のメニューテキストは、
外部ファイルに一括保存して
いるため、多言語版としてすぐ
に利用可能。
将来的には、ログインユーザー
ごとに利用言語を選択できる
ように。
「シラサギ」の機能について
「シラサギ」は、中・大規模サイト向けCMSということもあり、他にもたくさんの機能があります。
特に、官公庁、自治体、教育委員会、大学などで利用されることを想定し、可能な限り運用が
楽になるように配慮しています。下記のシラサギ公式サイトで今後の開発予定については、
公開されておりますので、是非ご確認ください。
http://www.ss-proj.org/dev/roadmap.html
目次
1.会社概要
2.シラサギについて
3.CMSアプリケーション
4.開発コミュニティ
GitHubによる公開開発
「シラサギ」は、GitHub上で公開開発を行っており、全国の中小ベンダーが開発に参加して
います。オープンデータプラグインも、導入によって定期的に機能追加されています。
シラサギ公式サイト
新着情報
リリースノート
よくある質問
ダウンロード
オンラインデモ
導入事例
開発情報
など
http://ss-proj.org/
シラサギプロジェクト開発コミュニティ
シラサギプロジェクトの開発コミュ
ニティをfacebook上の公開グルー
プとして立ち上げています。
リリース詳細や他のエンジニアの
方からのレポートなども掲載され
ていますので、是非ご参加くださ
い。
研修制度、開発セミナー
■研修制度
下記のエンジニア受入実績があります。
徳島県内企業 3社
東京の企業 1社
※期間は1週間~3ヵ月
■開発セミナー
シラサギを用いた開発セミナーを実施しています。
松江エンジニア向け 11名 1月30日
Rubyビジネス推進協議会(大阪) 20名 2月27日
東京築地 23名 4月22日
東京築地 25名 10月15日
塩尻 12名 10月16日
ハンズオンの導入
ハンズオンの狙い
1. シラサギの概要を理解する。
2. シラサギの仕組みを理解する。
3. シラサギの機能追加と機能拡張の方法を理解する。
導入の目的
管理画面
1. メニューやコンテキストメニューの操作方法
2. フォルダ
3. レイアウト
4. パーツ
5. ページ
6. アドオン
シラサギデモ
http://ss-proj.org/download/demo.html
Googleで「shirasagi demo」を検索してもOK
http://localhost:3000/.mypage
Vagrantの環境をお持ちの方
公開画面と管理画面
管理画面 – システム管理
管理画面 – サイト管理
管理画面 – フォルダ一覧
公開画面 – 記事フォルダ
管理画面 – フォルダ詳細
管理画面 – レイアウト一覧
管理画面 – レイアウト詳細
管理画面 – 記事一覧
管理画面 – 記事詳細
公開画面 – 記事詳細
アドオン
以下をカプセル化したもの
1. DBのフィールド
2. HTMLの入力フィールド
3. ビジネス・ロジック
Rails モデルクラスに include することで、モデルの機能を拡張する。
Rails モデルクラスでのアドオン
class Article::Page
include Cms::Page::Model
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::ReleasePlan
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Event::Addon::Date
include Map::Addon::Page
include Workflow::Addon::Approver
include Contact::Addon::Page
include History::Addon::Backup
…
振り返り
管理画面
1. メニューやコンテキストメニューの操作方法
2. フォルダ
3. レイアウト
4. パーツ
5. ページ
6. アドオン
ハンズオン環境構築
ハンズオンの環境構築
環境構築
1. VirtualBox インストール
2. Vagrant インストール
3. Windows の方だけ
1. git のインストール
2. Tera Term インストール
4. Vagrant Boxのインストール
VirtualBox & Vagrant インストール
■VirtualBox
https://www.virtualbox.org/wiki/Downloads
Googleで「virtualbox download」を検索してもOK
■Vagrant
https://www.vagrantup.com/downloads.html
Googleで「vagrant download」を検索してもOK
Windows の方だけ
■Git
https://msysgit.github.io/
Googleで「windows git」を検索してもOK
■Tera Term
http://sourceforge.jp/projects/ttssh2/releases/
Googleで「teraterm download」を検索してもOK
ハンズオン用Github
https://github.com/itowtips/ss-handson
Googleで「github itowtips」を検索してもOK
SSID: XXXXXXXX
PASS: xxxxxxxx
ハンズオン用Github
https://github.com/itowtips/ss-handson
Vagrantfile をダウンロード
ハンズオン環境の起動
> cd Vagrantfile をダウンロードしたディレクトリ
> vagrant up
ハンズオン環境へログイン
■Windowsの方
IPアドレス: localhost
ポート: 2222
User: vagrant
Password: vagrant
■Mac, Linux の方
$ vagrant ssh
シラサギハンズオン
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. シラサギの構成
4. ブログページ作成
5. 天気入力フォーム作成
6. 一覧フォルダー作成
開発サンプル 紹介
SHIRASAGI Wiki
https://github.com/shirasagi/shirasagi/wiki
開発サンプル:ブログページ
https://github.com/shirasagi/shirasagi/wiki/開発サンプル:ブログページ
今回のハンズオンで使用するリポジトリ、コマンド集などあります
https://github.com/itowtips/ss-handson
※これを見ながら進めていきます
開発サンプル 紹介
シラサギWiki:開発サンプルブログページ
シラサギにはページを作成し公開できる機能がいくつかあります
• 記事ページ
• 固定ページ
• イベントページ
• FAQページ
開発サンプル 紹介
シラサギWiki:開発サンプルブログページ
シラサギにはページを作成し公開できる機能がいくつかあります
• 記事ページ
• 固定ページ
• イベントページ
• FAQページ
• ブログページ ← 今回はこれを追加します
開発サンプル 紹介
シラサギWiki:開発サンプルブログページ
今回のハンズオンの流れ
1. 開発用のシラサギインストール
シラサギのインストール、デモデータの登録ができるようになります
2. シラサギの構成について
他のRailsアプリケーションと違う、変わった構成の箇所を紹介
3. ブログページ作成
ページの追加を行います 独自のページが作れるようになります
4. 天気入力フォーム作成
アドオンの追加を行います 入力フォームの拡張ができるようになります
5. フォルダーの追加
作成したページ用一覧フォルダーの追加を行います、フォルダー作成ができるようになります
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. シラサギの構成
4. ブログページ作成
5. 天気入力フォーム作成
6. 一覧フォルダー作成
準備 前提知識
シラサギで使っている技術
• Ruby & Ruby On Rails
• Javascript & CoffeeScript
• Css & Scss
• Git
• MongoDB
準備 前提知識
シラサギで使っている技術
• Ruby & Ruby On Rails
• Javascript & CoffeeScript
• Css & Scss
• Git
• MongoDB
準備 Gitとソースコード
シラサギの動く環境がある方はGitHubからソースコードを取得してください
#cd $HOME
#git clone https://github.com/itowtips/ss-handson sample
#cd sample
準備 Gitとソースコード
必要な設定ファイル(各種ymlとunicorn.rb)をコピーします
#cd $HOME
#git clone https://github.com/itowtips/ss-handson sample
#cd sample
#cp config/samples/* config/
準備 Gitとソースコード
bundle install
#cd $HOME
#git clone https://github.com/itowtips/ss-handson sample
#cd sample
#cp config/samples/* config/
#bundle install
準備 MongoDB設定
# vi config/mongoid.yml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# mongodb configuration
production:
sessions:
default:
database: ss
development:
# Configure available database sessions. (required)
sessions:
# Defines the default session. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: ss
使用するデータベース名を変更します production & development
準備 MongoDB設定
# vi config/mongoid.yml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# mongodb configuration
production:
sessions:
default:
database: ss_sample
development:
# Configure available database sessions. (required)
sessions:
# Defines the default session. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: ss_sample
使用するデータベース名を変更します production & development
準備 RAILS_ENV
# cp config/defaults/environment.yml config/
# vi config/environment.yml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# default environment
RAILS_ENV: production
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Railsをdevelopmentモードに
準備 RAILS_ENV
# cp config/defaults/environment.yml config/
# vi config/environment.yml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# default environment
RAILS_ENV: development
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Railsをdevelopmentモードに
準備 サンプルデータ
#rake db:create_indexes
MongoDB インデックス作成
準備 サンプルデータ
#rake db:create_indexes
#rake ss:create_user data='{ name: "システム管理者", email: "sys@example.jp", password: "pass" }'
システム管理者作成
準備 サンプルデータ
#rake db:create_indexes
#rake ss:create_user data='{ name: "システム管理者", email: "sys@example.jp", password: "pass" }'
#rake ss:create_site data='{ name: "サイト名", host: "www", domains: "localhost:3000" }'
サイト作成
環境にあわせてIP or ドメイン
準備 サンプルデータ
#rake db:create_indexes
#rake ss:create_user data='{ name: "システム管理者", email: "sys@example.jp", password: "pass" }'
#rake ss:create_site data='{ name: "サイト名", host: "www", domains: "localhost:3000" }'
#rake db:seed name=users site=www
サンプルユーザ&グループ作成
準備 サンプルデータ
#rake db:create_indexes
#rake ss:create_user data='{ name: "システム管理者", email: "sys@example.jp", password: "pass" }'
#rake ss:create_site data='{ name: "サイト名", host: "www", domains: "localhost:3000" }'
#rake db:seed name=users site=www
#rake db:seed name=demo site=www
自治体サンプルデータ投入
準備 サンプルデータ
#rake db:create_indexes
#rake ss:create_user data='{ name: "システム管理者", email: "sys@example.jp", password: "pass" }'
#rake ss:create_site data='{ name: "サイト名", host: "www", domains: "localhost:3000" }'
#rake db:seed name=users site=www
#rake db:seed name=demo site=www
#rake unicorn:start
unicorn起動
準備 確認
http://ドメイン:3000/
準備 ソースコード
シラサギはGitでソースコードを管理しています
今回使用するリポジトリは v0.9.0ベース
3つの開発サンプル(ブログページ、天気アドオン、フォルダー)
をブランチに分けています適宜、切り替えて動かしてみてください
git checkout -b sample-blog-page origin/sample-blog-page
git checkout -b sample-blog-addon origin/sample-blog-page
git checkout -b sample-blog-node origin/sample-blog-page
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. シラサギの構成
4. ブログページ作成
5. 天気入力フォーム作成
6. 一覧フォルダー作成
シラサギの構成
app/controllers
app/models
app/views
config/locales
config/routes
ソースコードをエディタで開いてみてください
シラサギの構成
app/controllers
app/models
app/views
config/locales
config/routes
シラサギ独特な構成
• 再利用可能なプログラムがある
• 公開画面、管理画面がある
• 静的HTML書き出し機能がある
シラサギの構成
app/controllers
app/models
app/views
config/locales
config/routes
シラサギ独特な構成
• addon
• routes
• agents
シラサギの構成 Addon
app/controllers
app/models
app/views
config/locales
config/routes
シラサギ独特な構成
• addon
• routes
• agents
シラサギの構成 Addon
app/controllers
app/models
app/views
config/locales
config/routes
models/concerns/cms/addon/body.rb 本文
models/concerns/cms/addon/file.rb ファイル
models/concerns/cms/addon/meta.rb メタ情報
…
シラサギの構成 Routing
app/controllers
app/models
app/views
config/locales
config/routes
シラサギ独特な構成
• routes
• addon
• agents
app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
シラサギの構成 Routing
記事モジュール
app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
シラサギの構成 Routing
config/routes/article/routes.rb
app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
ルーティング追加ブロック
管理画面 content
公開画面 node, page, part
※namespaceの拡張
シラサギの構成 Routing
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
config/routes/article/routes.rb
次のコマンドで記事モジュールのルーティングを確認してみてください。
#rake routes | grep article
シラサギの構成 Routing
シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
Ex. 管理画面
記事一覧: http://demo.ss-proj.org/.demo/article1/pages
記事詳細: http://demo.ss-proj.org/.demo/article1/pages/28
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
/.:site/article:cid
pages
シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
Ex. 公開画面
記事一覧フォルダー: http://demo.ss-proj.org/docs/
記事ページ: http://demo.ss-proj.org/docs/30.html
cms/public#index cell: " nodes/page " とは?
シラサギの構成 Routing
Routingまとめ
• 管理画面
• content ブロックを記述し定義
• ドメイン/.サイト名/モジュール(ID)/リソース
ex. http://demo.ss-proj.org/.demo/article1/pages
• 公開画面
• page, node, parts ブロックを記述し定義
• アクセスできるURL(ルーティング)は変化する?
記事を作った、記事を消した等々
→agents
ブログページ作成 Agents
app/controllers
app/models
app/views
config/locales
config/routes
シラサギ独特な構成
• routes
• addon
• agents
ブログページ作成 Agents
app/controllers
app/models
app/views
config/locales
config/routes
controllers/article/agents
• agents
• アクションチェインを実現するための手段
• アクション→アクションという流れを実現する
• 利用箇所
• 公開側のコントローラー (cms/public_controller)
公開側(利用者)のアクセスを各コンテンツに振り分ける
Ex. http://ドメイン/docs/page.html → 記事ページ
http://ドメイン/calendar/ → イベントカレンダー
• 静的ページ書き出し
ブログページ作成 Agents
公開側ルーティング config/routes/cms/routes_end.rb
• 管理画面と特殊なルーティング以外全てをcms/public#indexで受け付ける
…
match "*public_path" => "cms/public#index", public_path: /[^.].*/, via: [:get, :post, :put, :patch, :delete]
root "cms/public#index", defaults: { format: :html }
…
※glob ルーティング(Route Globbing)
ブログページ作成 Agents
公開側ルーティング config/routes/cms/routes_end.rb
• 管理画面と特殊なルーティング以外全てをcms/public#indexで受け付ける
…
match "*public_path" => "cms/public#index", public_path: /[^.].*/, via: [:get, :post, :put, :patch, :delete]
root "cms/public#index", defaults: { format: :html }
…
※glob ルーティング(Route Globbing)
ブログページ作成 Agents
公開側ルーティング config/routes/cms/routes_end.rb
• 管理画面と特殊なルーティング以外全てをcms/public#indexで受け付ける
公開画面"記事"にアクセス
http://ドメイン/docs/page.html
…
match "*public_path" => "cms/public#index", public_path: /[^.].*/, via: [:get, :post, :put, :patch, :delete]
root "cms/public#index", defaults: { format: :html }
…
※glob ルーティング(Route Globbing)
ブログページ作成 Agents
公開側ルーティング config/routes/cms/routes_end.rb
• 管理画面と特殊なルーティング以外全てをcms/public#indexで受け付ける
公開画面"記事"にアクセス
http://ドメイン/docs/page.html
Controller
cms/public#index
…
match "*public_path" => "cms/public#index", public_path: /[^.].*/, via: [:get, :post, :put, :patch, :delete]
root "cms/public#index", defaults: { format: :html }
…
※glob ルーティング(Route Globbing)
ブログページ作成 Agents
公開側ルーティング config/routes/cms/routes_end.rb
• 管理画面と特殊なルーティング以外全てをcms/public#indexで受け付ける
公開画面"記事"にアクセス
http://ドメイン/docs/page.html
Controller
cms/public#index → article/agents/pages/page_controller#index
…
match "*public_path" => "cms/public#index", public_path: /[^.].*/, via: [:get, :post, :put, :patch, :delete]
root "cms/public#index", defaults: { format: :html }
…
※glob ルーティング(Route Globbing)
ブログページ作成 Agents
cell: " pages/page "
シラサギの構成
まとめ
• Addon
• 再利用可能なプログラム
• Model にinclude することで アドオンの入力フォームが増える
• Routing
• 管理画面 公開画面がある
• コンテンツを追加する場合はそれぞれのルーティングを定義する
• Agents
• アクション → アクションを実現するための仕組み
• 公開画面の変化するルーティングの解決に利用
• 静的書き出しに利用
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. シラサギの構成
4. ブログページ作成
5. 天気入力フォーム作成
6. 一覧フォルダー作成
ブログページ作成
シラサギWiki:ブログページ作成
ブログページ作成
シラサギWiki:ブログページ作成
※管理画面でブログページが作成できるようになります。
ブログページ作成
シラサギWiki:ブログページ作成
※公開画面での表示。
まずは既存のページを参考に、同様のものを作成します。
ブログページ作成
app/controllers
app/models
app/views
config/locales
config/routes
ここから実際に、ブログモジュールを追加していきます。
ブログページ作成
app/controllers/blog
app/models/blog
app/views/blog
config/locales/blog
config/routes/blog
ここから実際に、ブログモジュールを追加していきます。
手動でソースを追加するのは面倒…
#git checkout -b sample-blog-page origin/sample-blog-page
#rake unicorn:stop
#rake unicorn:start
ブログページ作成
Blog Page Model
app/models/blog/page.rb
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Cms::Model::Page
app/models/concerns/cms/model/page.rb
DB の Collection は cms_pages に
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Cms::Model::Page
ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Addons
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
…
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Addons
ブログページ作成
Blog Page Model
app/models/blog/page.rb
• default_scope
where(route: "blog/page")
route: コンテンツを識別する値
"blog/page" ブログ/ブログページ
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
default_scope
ブログページ作成
Blog Page Initializer
app/models/blog/page.rb
app/models/blog/initializer.rb
• Cms::Node.plugin "blog/page"
フォルダー属性にブログ/ブログページというコンテンツが追加されます
module Blog
class Initializer
Cms::Node.plugin "blog/page"
end
end
ブログページ作成
Blog Page Controller
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
• ブログページ管理側コントローラー
class Blog::PagesController < ApplicationController
include Cms::BaseFilter
include Cms::PageFilter
include Workflow::PageFilter
model Blog::Page
append_view_path "app/views/cms/pages“
navi_view "blog/main/navi“
private
def fix_params
{ cur_user: @cur_user, cur_site: @cur_site,
cur_node: @cur_node }
end
#public
# Cms::PageFilter
end
ブログページ作成
Blog Page Controller
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
• Include Filters
必要なアクションが定義されます
Index, show, new…
class Blog::PagesController < ApplicationController
include Cms::BaseFilter
include Cms::PageFilter
include Workflow::PageFilter
model Blog::Page
append_view_path "app/views/cms/pages“
navi_view "blog/main/navi“
private
def fix_params
{ cur_user: @cur_user, cur_site: @cur_site,
cur_node: @cur_node }
end
#public
# Cms::PageFilter
end
Filters
ブログページ作成
Blog Page Agents View & Controller
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
app/controllers/blog/agents/pages_controller.rb
app/views/blog/agents/pages/index.html.erb
• ブログページ公開側コントローラー
公開側ビュー
• agentsの下に配置
class Blog::Agents::Pages::PageController < ApplicationController
include Cms::PageFilter::View
end
<%= render file: "cms/agents/pages/page/index" %>
ブログページ作成
Blog Page Navi View
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
app/controllers/blog/agents/pages_controller.rb
app/views/blog/agents/pages/index.html.erb
app/views/blog/main/_navi.html.erb
• ブログモジュールnavi view
<%= node_navi do %>
<nav class="sub-menu">
<header><h1><%=t"modules.blog" %></h1></header>
<div>
<%= link_to :"blog.page", blog_pages_path,
class: "icon-page" %>
</div>
</nav>
<% end %>
ブログページ作成
Blog Config Locales
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
app/controllers/blog/agents/pages_controller.rb
app/views/blog/agents/pages/index.html.erb
app/views/blog/main/_navi.html.erb
config/locales/blog/ja.yml
• ブログモジュールのlocale
ja:
blog:
page: ブログページ
modules:
blog: ブログ
" blog/page "
ブログ/ブログページ
ブログページ作成
Blog Page Routes
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
app/controllers/blog/agents/pages_controller.rb
app/views/blog/agents/pages/index.html.erb
app/views/blog/main/_navi.html.erb
config/locales/blog/ja.yml
config/routes/blog/routes.rb
• ブログモジュールのRouting
管理画面 content "blog" do … end
公開画面 page "blog" do … end
SS::Application.routes.draw do
Blog::Initializer
concern :deletion do
get :delete, on: :member
end
content "blog" do
get “/” => redirect { |p, req| “#{req.path}/pages” },
as: :main
resources :pages, concerns: :deletion
end
page "blog" do
get "page/:filename.:format" => "public#index",
cell: "pages/page"
end
end
管理画面
公開画面
ブログページ作成
app/models/blog/page.rb
app/models/blog/initializer.rb
app/controllers/blog/pages_controller.rb
app/controllers/blog/agents/pages_controller.rb
app/views/blog/agents/pages/index.html.erb
app/views/blog/main/_navi.html.erb
config/locales/blog/ja.yml
config/routes/blog/routes.rb
ブログページ作成 確認
作成したブログページを使ってみます。
1. 適当なフォルダー下でモジュールをブログに切り替え
2. 新規作成
→ ブログページが作成できます。
ブログページ作成
作成したブログページのMongoドキュメント(レコード)をチェックしてみます。
#mongo
ブログページ作成
作成したブログページのMongoドキュメント(レコード)をチェックしてみます。
#mongo
#use ss_sample
ブログページ作成
作成したブログページのMongoドキュメント(レコード)をチェックしてみます。
#mongo
#use ss_sample
#db.cms_pages.find({route: "blog/page"}).pretty()
ブログページ作成
作成したブログページのMongoドキュメント(レコード)をチェックしてみます。
#mongo
#use ss_sample
#db.cms_pages.find({route: "blog/page"}).pretty()
{
"_id" : 43,
"permission_level" : 1,
"group_ids" : [1],
"state" : "public",
"order" : 0,
"category_ids" : [ ],
"file_ids" : [ ],
"related_page_ids" : [ ],
"route" : "blog/page",
“name” : “ページサンプル",
“layout_id” : 10, …
ブログページ作成
ここまでで新しいページが作成できるようになりました。
しかし、これでは記事ページと変わらないので
→ 入力フォームをカスタマイズします。
#git checkout -b sample-blog-addon origin/sample-blog-addon
#rake unicorn:restart
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. ブログページ作成
4. 天気入力フォーム作成
5. 一覧フォルダー作成
天気入力フォーム作成
シラサギWiki:天気入力フォーム作成
天気入力フォーム作成
シラサギWiki:天気入力フォーム作成
※ページのアドオンを追加し入力フォームを追加します。
天気入力フォーム作成
シラサギWiki:天気入力フォーム作成
※公開側では入力した天気と日付を表示します。
天気入力フォーム作成
Blog Weather Addon
app/models/concerns/blog/addon/weather.rb
• 天気アドオン
module Blog::Addon
module Weather
extend ActiveSupport::Concern
extend SS::Addon
included do
field :weather, type: String
permit_params :weather
public
def weather_options
[ ["晴れ", "sunny"], ["曇り", "cloudy"],
["雨", "rain"], ["雪", "snow"], ]
end
end
end
end
field
天気入力フォーム作成
Blog Page Model
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
• 天気アドオンをページに追加
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
include Blog::Addon::Weather
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Include weather addon
天気入力フォーム作成
Blog Weather Addon Views
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
app/views/blog/agents/addons/weather/_form.html.erb
app/views/blog/agents/addons/weather/_show.html.rb
app/views/blog/agents/addons/weather/view/index.html.erb
• 天気アドオンのview
天気入力フォーム作成
Blog Weather Addon Views
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
app/views/blog/agents/addons/weather/_form.html.erb 管理画面入力フォーム
app/views/blog/agents/addons/weather/_show.html.rb 管理画面詳細画面
app/views/blog/agents/addons/weather/view/index.html.erb 公開画面
• 天気アドオンのview
天気入力フォーム作成
Blog Config Locales
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
app/views/blog/agents/addons/weather/_form.html.erb
app/views/blog/agents/addons/weather/_show.html.rb
app/views/blog/agents/addons/weather/view/index.html.erb
config/locale/ja.yml
• localeを追記
ja:
blog:
page: ブログページ
sunny: ☀
cloudy: ☁
rain: ☂
snow: ☃
modules:
blog: ブログ
addons:
blog/weather: 今日の天気
mongoid:
attributes:
cms/page/model: weather: 天気
天気入力フォーム作成
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
app/views/blog/agents/addons/weather/_form.html.erb
app/views/blog/agents/addons/weather/_show.html.rb
app/views/blog/agents/addons/weather/view/index.html.erb
config/locale/ja.yml
天気入力フォーム作成
管理画面から“今日の天気”を入力してみます。
天気入力フォーム作成 練習
1. 天気マークを追加してみてください (雷注意報、にわか雨、お花見日和…
2. 別の入力フォームを作ってみてください (別のアドオンを作成
3. 修正したコードをローカルでcommitしてみてください (おまけ
天気入力フォーム作成
独自の入力フォームを作成しました。
最後にフォルダーの作成を説明します。
#git checkout -b sample-blog-node origin/sample-blog-node
#rake unicorn:restart
ハンズオン 目次
1. 開発サンプル紹介
2. 準備
3. シラサギの構成
4. ブログページ作成
5. 天気入力フォーム作成
6. 一覧フォルダー作成
一覧フォルダー作成
シラサギWiki:一覧フォルダー作成
一覧フォルダー作成
※「フォルダー属性」ブログページリストが作成できるようになります
シラサギWiki:一覧フォルダー作成
一覧フォルダー作成
※公開側のページ一覧を変更し独自のものを作成します
シラサギWiki:一覧フォルダー作成
一覧フォルダー作成
Blog Node Model
app/models/blog/node.rb
• ブログ一覧フォルダー
module Blog::Node
class Base
include Cms::Model ::Node
default_scope ->{ where(route: /^blog//) }
end
class Page
include Cms::Model ::Node
include Cms::Addon::PageList
default_scope ->{ where(route: "blog/page") }
end
end
一覧フォルダー作成
Blog Agents Nodes/Page Controller & View
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
• 公開側コントローラー
class Blog::Agents::Nodes::PageController < ApplicationController
include Cms::NodeFilter::View
helper Cms::ListHelper
Public
def pages
Blog::Page.site(@cur_site).public(@cur_date).
where(@cur_node.condition_hash)
end
def index
@items = pages.
order_by(@cur_node.sort_hash).
page(params[:page]). per(@cur_node.limit)
render_with_pagination @items
end
end
一覧フォルダー作成
Blog Agents Nodes/Page Controller & View
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
app/views/blog/agents/nodes/page/index.html.erb
• 公開側一覧ビュー
一覧フォルダー作成
Blog Config Locales
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
app/views/blog/agents/nodes/page/index.html.erb
config/locales/blog/ja.yml
• localeを追記
ja:
…
cms:
nodes:
blog/page: ブログページリスト
…
一覧フォルダー作成
Blog Config Locales
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
app/views/blog/agents/nodes/page/index.html.erb
config/locales/blog/ja.yml
config/routes/blog/routes.rb
• routesにnodeブロックを追記
フォルダーの公開側
SS::Application.routes.draw do
…
node "blog" do
get "page/(index.:format)" => "public#index",
cell: "nodes/page "
end
…
end
一覧フォルダー作成
app/models/blog/node.rb
app/views/blog/agents/nodes/page/index.html.erb
app/controllers/blog/agents/nodes/page_controller.rb
config/locales/blog/ja.yml
config/routes/blog/routes.rb
一覧フォルダー作成
管理画面から一覧フォルダーを作成してみます。
まとめ
• 自治体サンプルのインストールを行いました。
• シラサギの独特な構成を紹介しました。
• 新しいページ、アドオン、フォルダーを作りました。
• 既存のコードを変更せずにコンテンツを追加できます。
最後に
長い時間ありがとうございました!
是非SHIRASAGIをカスタマイズしてみてください!

More Related Content

What's hot

Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Genki WATANABE
 
2014 01-11-tdc-6th-anniversary
2014 01-11-tdc-6th-anniversary2014 01-11-tdc-6th-anniversary
2014 01-11-tdc-6th-anniversaryChieko Aihara
 
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
Kentaro Takasaki
 
Azureの契約直前・直後に意識しておくこと10箇条
Azureの契約直前・直後に意識しておくこと10箇条Azureの契約直前・直後に意識しておくこと10箇条
Azureの契約直前・直後に意識しておくこと10箇条
Yui Ashikaga
 
Domino & REST
Domino & RESTDomino & REST
Domino & REST
賢次 海老原
 
Azure ad 条件付きアクセス Legacy block_Preview
Azure ad 条件付きアクセス Legacy block_PreviewAzure ad 条件付きアクセス Legacy block_Preview
Azure ad 条件付きアクセス Legacy block_Preview
R N
 
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
Azure 相談センター
 
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
Ayumi Tada
 
Aws lambdaで[ソンナコ]を実装してみた
Aws lambdaで[ソンナコ]を実装してみたAws lambdaで[ソンナコ]を実装してみた
Aws lambdaで[ソンナコ]を実装してみた
Fumihito Yokoyama
 
AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価
Trainocate Japan, Ltd.
 
60分でわかった気になるMicrosoft Azure
60分でわかった気になるMicrosoft Azure60分でわかった気になるMicrosoft Azure
60分でわかった気になるMicrosoft Azure
Kazumi Hirose
 
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayuAWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
Ayumi Tada
 
画像解析最前線!WatsonとTensorFlowを比較してみた
画像解析最前線!WatsonとTensorFlowを比較してみた画像解析最前線!WatsonとTensorFlowを比較してみた
画像解析最前線!WatsonとTensorFlowを比較してみた
softlayerjp
 
俺的 Build Update まとめ
俺的 Build Update まとめ俺的 Build Update まとめ
俺的 Build Update まとめ
Yui Ashikaga
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
Yosuke HASEGAWA
 
HCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイドHCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイド
Software Info HCL Japan
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
Yosuke HASEGAWA
 

What's hot (18)

Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
 
2014 01-11-tdc-6th-anniversary
2014 01-11-tdc-6th-anniversary2014 01-11-tdc-6th-anniversary
2014 01-11-tdc-6th-anniversary
 
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
 
Azureの契約直前・直後に意識しておくこと10箇条
Azureの契約直前・直後に意識しておくこと10箇条Azureの契約直前・直後に意識しておくこと10箇条
Azureの契約直前・直後に意識しておくこと10箇条
 
Domino & REST
Domino & RESTDomino & REST
Domino & REST
 
Azure ad 条件付きアクセス Legacy block_Preview
Azure ad 条件付きアクセス Legacy block_PreviewAzure ad 条件付きアクセス Legacy block_Preview
Azure ad 条件付きアクセス Legacy block_Preview
 
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
Web制作会社様向け 知って得するMicrosoft Azureの概要と使い方!
 
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
160918 第7回 JAWS-UG 熊本 LT資料 - 企業がクラウドに適応するために #jawsug @applebear_ayu
 
Aws lambdaで[ソンナコ]を実装してみた
Aws lambdaで[ソンナコ]を実装してみたAws lambdaで[ソンナコ]を実装してみた
Aws lambdaで[ソンナコ]を実装してみた
 
AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価
 
60分でわかった気になるMicrosoft Azure
60分でわかった気になるMicrosoft Azure60分でわかった気になるMicrosoft Azure
60分でわかった気になるMicrosoft Azure
 
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayuAWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
AWS初心者に贈る〜AWS関連コンテンツを使い倒そう_20150514 #jawsug_bgnr #jawsug @applebear_ayu
 
画像解析最前線!WatsonとTensorFlowを比較してみた
画像解析最前線!WatsonとTensorFlowを比較してみた画像解析最前線!WatsonとTensorFlowを比較してみた
画像解析最前線!WatsonとTensorFlowを比較してみた
 
俺的 Build Update まとめ
俺的 Build Update まとめ俺的 Build Update まとめ
俺的 Build Update まとめ
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
HCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイドHCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイド
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
 

Similar to シラサギハンズオン 1015 1016

徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
Yu Ito
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
Masahito Zembutsu
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
Masashi Shinbara
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
Takao Tetsuro
 
サーバー設定自動化は経営課題
サーバー設定自動化は経営課題 サーバー設定自動化は経営課題
サーバー設定自動化は経営課題
Maho Takara
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
辰徳 斎藤
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
Kohei Kadowaki
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
 
WebServerDevelopment
WebServerDevelopmentWebServerDevelopment
WebServerDevelopment
NakamuraShinsaku
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
Web制作のアレコレ
Web制作のアレコレWeb制作のアレコレ
Web制作のアレコレregret raym
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
Masaki Kobayashi
 

Similar to シラサギハンズオン 1015 1016 (20)

徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
サーバー設定自動化は経営課題
サーバー設定自動化は経営課題 サーバー設定自動化は経営課題
サーバー設定自動化は経営課題
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
WebServerDevelopment
WebServerDevelopmentWebServerDevelopment
WebServerDevelopment
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
Web制作のアレコレ
Web制作のアレコレWeb制作のアレコレ
Web制作のアレコレ
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 

Recently uploaded

キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 

Recently uploaded (8)

キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 

シラサギハンズオン 1015 1016

Editor's Notes

  1. ・時間になりましたので、シラサギハンズオンを始めさせていただきます。 ・皆様、忙しい中お集まりいただきありがとうございます。 ・このような場を設けていただいた、 XXXXXXならびに関係者様の皆様、ありがとうございます。
  2. シラサギハンズオンですが、ウェブチップスから野原、伊藤、中野の 3 名でお送りします。 申し遅れましたが、私は中野と言います。本日はよろしくお願いします。
  3. 野原から、私、中野にかわりまして、ハンズオンに取り掛かる前に、導入として、シラサギの概要と操作方法を簡単ではありますが、説明させていいただきます。
  4. ハンズオンの狙いは、…(画面を読み上げる) 本日のハンズオンを受講して、次の案件に、シラサギをご検討いただければと思います。
  5. 導入では、シラサギのデモの主として管理画面を解説しながら、メニューやコンテキストメニューの操作方法、フォルダ、レイアウト、パーツ、ページ、アドオンといったシラサギの重要な概念を理解することにあります。
  6. ・皆様にも実際に操作していただきたいので、ネットワークへアクセス可能な方は、上記の URL をウェブブラウザで開いてください。
  7. ・シラサギの公式サイトでは、自治体サンプルと、企業サンプルの 2 つのデモを提供しています。 ・これらは、広く一般に公開しているので、公開画面と呼びます。 ・下の方にあるのが管理画面で、  管理画面では記事の投稿や削除などの機能が利用できます。 ・シラサギは、マルチテナントをサポートしているので、公開画面は 2 つありますが、管理画面は 1 つしかありません。 ・では、早速、システム管理者アカウントを使用して、管理画面にログインしてみましょう。
  8. ・管理画面にログインして、まず表示されるのは、システム全体を管理する画面です。 ・右側には管理できるサイトの一覧が表示されています。  デモとして公開している「自治体サンプル」と「企業サンプル」の 2 つが並んでいます。 ・左側にはシステム管理用のメニューが並んでいます。  シラサギではこの左側のメニューを「ナビビュー」と呼んでいますので、以降「ナビビュー」と呼びます。 ・そして、先ほど野原が、シラサギは WEB アプリ開発プラットフォームであると述べました。 ・システム管理用メニューは、WEB アプリ開発プラットフォームを管理するためのメニューでもあり、 「サイト」「権限/ロール」「ユーザー」「グループ」などが並んでいます。 ・「サイト」管理メニューからは、サイトをいくつでも追加することが出来ます。 ・システム管理の方法を解説していると、時間がいくらあっても足りません。 本日は シラサギの CMS としての機能を見て行きたいと思いますので、早速ですが「自治体サンプル」をクリックしてください。
  9. ・ナビビューには、サイトを管理するためのメニューが表示されています。 ・本導入では、時間の都合もあり、「コンテンツ」から「ページ書き出し」の範囲を解説します。 ・最初に選択されている「コンテンツ」は、よく使用する機能へのショートカットです。 ・すぐ下にあるのが「フォルダー」です。 「フォルダー」では、CMS の主役である「ページ」を階層構造で管理することができ、「ページ」を管理しやすくしています。 ・「フォルダー」には、「ページ」を管理する以外のすごく重要な機能があります。 「ページ」を書けばサイトが構築できたら楽なんですが、  サイトには、記事一覧ページ、イベントカレンダー、問い合わせフォームなど「ページ」以外のコンテンツがあります。 ・シラサギの「フォルダー」では「ページ」以外のコンテンツを効率よく管理することができます。 ・フォルダーの下にあるのが「固定ページ」です。 どの企業様もそうですが、トップページには非常に凝った専用のページを配置することが多いです。  そのような固定の URL で表示する一枚物のページを「固定ページ」で管理することができます。 ・固定ページの下にあるのが「パーツ」です。 シラサギでは、様々なページで繰り返し出現する再利用可能な部分を「パーツ」という部品にして管理することができます。  パーツは、すぐ下にある「レイアウト」に組み込んで使用します。 ・「レイアウト」とは、ページ全体をどのように構成するかを定義したもので、  ロゴの位置、ナビゲーションの位置、メニューの位置、本文の位置、フッターの位置などを定義したものです。 ・最後の 2 つ。 「フォルダ書き出し」と「ページ書き出し」は、フォルダやページを HTML ファイルとして、ハードディスクに保存します。 内部的には、x_sendfile という機能を利用して apache や nginx が、ハードディスクに保存した HTML ファイルを直接応答することができるようになるため、 ユーザからのアクセスを効率よくさばくことができるようになります。 ・(小ネタ) 皆様、WBS砲という言葉を聞いたことが有りますでしょうか? テレビ東京のテレビ番組にワールド・ビジネス・サテライトというのがあり、略して WBS と呼びます。 WBS で取り上げられた直後から、急激にサイトのサクセスが増加することをいい、WBS砲をくらうと、サーバーの負荷がパンパンになって大変です。
  10. ・フォルダがどうなっているかを見て行きたいと思いますので、ナビメニューの「フォルダー」をクリックしてください。 ・左のメニューには、フォルダーを新規作成する「新規作成」があります。 ・右にはフォルダー一覧が表示されています。 ・フォルダ一覧ですが、ちょっと操作が特殊なので、先に説明します。 タイトル部分をクリックすると、フォルダ内に登録されている項目が見えます。 タイトル部分以外をクリックすると、コンテキストメニューが表示されます。 ・コンテキストメニューには、…(コンテキストメニューに表示されている項目を読み上げる) ・では、フォルダ画面の説明に戻ります。 一覧の左から、「タイトル」「フォルダー名」「モジュール」「更新日時」が表示されています。 ・「タイトル」と「更新日時」はその名の通りで、それぞれフォルダのタイトルと更新日時を表示しています。 ・「フォルダー名」は、公開画面の URL のパスと対応しており、SEO 的に重要な部分ですので、フォルダを新規に作成する場合は十分検討してください。 ・最後に「モジュール」ですが、「モジュール」とはフォルダに割り当てられている機能のことで、  イベント管理する「イベントカレンダー」フォルダには、「カレンダー」モジュールが割り当てられています。  記事を管理する「記事」フォルダには「記事」モジュール割り当てられています。 ・シラサギでは、一覧ページやイベントカレンダーページなどのページ以外のコンテンツを、「フォルダー」で定義します。 ・フォルダーが提供するコンテンツの一例として「記事」フォルダがどのようなコンテツを提供しているかを確認してみたいと思いますので、 「記事」フォルダの余白をクリックし、表示されたコンテキストメニューから「公開画面を見る」をクリックしてください。 記事ページの一覧が表示されました。
  11. ・記事の一覧ページが表示されました。 ・上部には、タイトルやメニュー、右側にはサイドメニューが並んでおり、画面の左中央部分に大きく記事一覧が表示されています。 ・この画面がどのように構成されているかを確認してみたいと思いますので、管理画面に戻って、「記事」フォルダーの余白をクリックし「詳細を見る」をクリックしてください。
  12. ・フォルダの詳細が表示されました。 ・左側に、記事フォルダを管理するためのメニューがあります。 ・その下にアドオンとありますが、これは後ほど解説します。 ・右側には大きく、記事フォルダのプロパティが表示されています。 ・時間の都合上、全てのプロパティを解説することは出来ないので、 注目して欲しいプロパティだけ解説しますと、 本フォルダには、ループ HTML が設定されています。  この部分は、ちょうど、公開画面で記事一覧にあたります。 記事フォルダでは、ループHTML に加えて、上部HTML、下部HTML の 3 つのプロパティで、記事一覧の見え方を設定することが出来ます。 ・公開画面の繰り返し以外の部分はどこで設定されているかというと、 「レイアウト」にプロパティに設定されている「記事レイアウト」で設定されています。 ・「記事レイアウト」をみてみましょう。 ナビメニューから、レイアウトをクリックしてみてください。
  13. ・レイアウトが表示されました。 先ほど見た「記事フォルダ」に設定されている「記事レイアウト」は下から 2 番目にあります。 ・「記事レイアウト」を見て行く前に、「レイアウト」の簡単に解説しておきます。 ・画面左には先ほどみたフォルダがあり、画面右にはレイアウト一覧が表示されています。 ・フォルダと同様、タイトル部分以外でクリックすると、コンテキストメニューが表示されます。 ・レイアウトもフォルダで管理することが出来ますが、 そもそもレイアウトは何十種類・何百種類も作成せず、たかだか30程度と数が少ないこともあり、フォルダの下に置くと逆に管理しにくいことから、 弊社では、レイアウトのフォルダは使用していません。 ・では、「記事レイアウト」を見てみたいので、「記事レイアウト」をクリックしてください。
  14. ・記事レイアウトが表示されました。 ・左側にはレイアウトを管理するためのメニューが有り、その下にはアドオンがあります。  アドオンについては後ほど説明します。 ・右側には、レイアウト名、ファイル名、肝心の HTML があります。 ・シラサギではレイアウトを HTML で書きますが、少し違うのは </ part …/> という部分です。 part という命令を利用して、レイアウトにパーツを組み込んでいます。 ・他、重要なのは yield という箇所です。 画面を少しスクロールしてみてください。 yield が見つかりましたか? ・「yield」ですが、Ruby プログラマならおなじみですね。Ruby と同じ yield です。 ・Ruby にあまり馴染みのない方向けに解説しますと、 yield と書かれた箇所に、先ほど記事フォルダでみた、上部 HTML、ループ HTML、下部 HTML が展開されます。 ・part にはパーツが、yield にはコンテンツの本体が展開されます。
  15. ・時間も残り少なくなってきましたので、CMS の主役である「記事ページ」を見て行きたいと思います。 ・フォルダーに戻り、「記事フォルダー」の中身を表示してみてください。 ・皆様、もう見慣れましたね。  左には管理するためのメニューが有り、右側には記事一覧が表示されています。 ・記事は、タイトル、ファイル名などの情報を持っており、フォルダーのところでも解説しましたが、  記事のファイル名は、 URL のパスに対応しており、SEO 的に非常に重要です。 ・デモなので、SEO 的に全くダメな連番がついていますが、  皆様がサイトを構築する際は、SEO を考えて適切なファイル名をつけてください。 ・なお某 CMS では、記事のパスが固定されておらず、SEO 的なチューニングがしにくかったんですが、シラサギでは大丈夫です。
  16. ・「転居届」をみてみましょう。 ・もうみなさん見慣れましたね。左側には記事を管理するためのメニューが有り、下にアドオンがあります。  アドオンの解説はこの後すぐです。 ・「本文」には、記事の内容が設定されています。 ・記事ページを公開画面で確認してみましょう。 ・本文に設定されている内容と同じものが表示されています。 ・本文以外の「ナビゲーションメニュー」や「いいね」ボタンは、先程と同様、記事ページに設定されているレイアウトで表示されています。
  17. ・お待ちかね、いよいよアドオンを解説する時がやって来ました。 ・アドオンとは、 ・DBのフィールドと、 ・HTMLの入力フィールド ・ビジネス・ロジック をカプセル化したものです。
  18. ・アドオンの例として、記事ページを表す Article::Page クラスをお見せしたいと思います。 ・まず最初に、ページの基本的な機能を提供する Cms::Page::Model を include しており、 その下から全てがアドオンです。 ・フォルダー画面、レイアウト画面、記事画面で「アドオン」と表示されていました。 基本的には、モデルクラスに組み込まれたアドオンが一つ一つ表示されています。 アドオンの中には、特定の条件下でしか有効にならないものもありますので、全てが画面に表示されているわけではありません。 ・シラサギでは、このようにモデルクラスにアドオンを include することで、簡単に拡張し、機能を追加することができます。 ・なぜこのようなことができるかというと、シラサギでは、ドキュメント指向データベースの MongoDB をバックエンドに採用しています。 MongoDB はスキーマレスなので、RDB のように事前にテーブル定義を決めなくてもいいんですね。 ・プログラマー的に、どういった点がメリットかというと、 モデルクラスにアドオンを include しても、db:migrate コマンドの実行は不要です。自動でフィールドが追加されます。 ・シラサギでは、記事ページ、固定ページ、イベントページ、FQAページなど目的に応じた様々な種類のページが有り、ページごとにフィールドが異なりますが、  全てのページは、”cms_pages” というテーブル(MongoDB ではコレクションと呼びますが)に入っています。 ・シラサギが、アドオンを include することで簡単に機能を追加できたり、様々な種類のページを “cms_pages” という単一のテーブルに格納できるのは、  MongoDB をフル活用しているからです。
  19. ・導入として、次の項目を見てきました。 …画面を読み上げる。
  20. ・ノートパソコンを持ってないという方。 その方は、引き続き前方のデモを御覧ください。 ・ノートパソコンを持っているけど、シラサギ・Ruby の環境がないという方? ・今、手を上げている方の中で、Vagrant をインストールしても良い・あるいは既に Vagrant を持っているという方、いらっしゃいますか?
  21. ・ハンズオンを開始する前に、VirtualBox や Vagrant のインストール、および、シラサギ・ハンズオン環境のインストールをお手伝いすることができます。 ・この中で、ノートパソコンを持ってないという方。 その方は、引き続き前方のデモを御覧ください。 ・ノートパソコンを持っているけど、シラサギ・Ruby の環境がないという方? ・今、手を上げている方の中で、Vagrant をインストールしても良い・あるいは既に Vagrant を持っているという方、いらっしゃいますか? ・
  22. ・会場の wi-fi 環境があまり速くないので、希望者に USB メモリを回すことができます。 ・ご希望の方、いらっしゃいますか? ・全員でダウンロードを始めてしまうと、wi-fiルータが過負荷になってネットワークがダウンする可能性もありますので、  ぜひ、USBメモリをご利用ください。
  23. ・会場の wi-fi 環境があまり速くないので、希望者に USB メモリを回すことができます。 ・ご希望の方、いらっしゃいますか? ・全員でダウンロードを始めてしまうと、wi-fiルータが過負荷になってネットワークがダウンする可能性もありますので、  ぜひ、USBメモリをご利用ください。
  24. DOS プロンプトを起動し、先ほど作成しいたディレクトリで、上記のコマンドを実行。
  25. Windows の方は、Teraterm を起動し、上記のサーバにログインしてみましょう。 Mac, Linux の方は、コンソールから vagrant ssh を実行してください。
  26. ハンズオンを始めさせていただきます。 今回のハンズオンではシラサギの機能追加の方法について説明します。 ここからは、主に開発、プログラムの話になっています。
  27. 5[min]