// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= HTML5 - パート1: HTML5アプリケーションの開始のビデオ
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: HTML5 - パート1: HTML5アプリケーションの開始のビデオ - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, HTML5 - パート1: HTML5アプリケーションの開始のビデオ

|===
|このスクリーンキャストでは、HTML5アプリケーション開発のためのNetBeans IDEのサポートを紹介します。このスクリーンキャストでは、IDEでウィザードを使用してHTML5プロジェクトを作成する方法、およびNetBeans拡張でChromeブラウザを使用して様々な画面サイズでプロジェクトのレイアウトを表示する方法を紹介します。

作成者: Ken Ganfield
時間: 8:05

link:http://bits.netbeans.org/media/html5-gettingstarted-final-screencast.mp4[+ダウンロード/フルサイズを視聴+] (44MB)

 

|NetBeans IDEでのHTML5アプリケーションの使用に関する詳細は、次のスクリーンキャストを参照してください。

* link:html5-css-screencast.html[+HTML5 - パート2: HTML5アプリケーションでのCSSスタイル・シートの操作+]
* link:html5-javascript-screencast.html[+ HTML5 - パート3: HTML5アプリケーションでのJavaScriptのテストとデバッグ+]

link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20Getting%20Started%20with%20HTML5%20Applications[+このチュートリアルに関するご意見をお寄せください+]
 
|===


== 関連リンク

* デモ: link:html5-css-screencast.html[+HTML5 - パート2: HTML5アプリケーションでのCSSスタイル・シートの操作+]
* デモ:link:html5-javascript-screencast.html[+ HTML5 - パート3: HTML5アプリケーションでのJavaScriptのテストとデバッグ+]
* link:../webclient/html5-gettingstarted.html[+HTML5アプリケーションの開始 +]
* link:../webclient/html5-editing-css.html[+HTML5アプリケーションでのCSSスタイル・シートの操作+]
* link:../webclient/html5-js-support.html[+HTML5アプリケーションでのJavaScriptのデバッグとテスト+]
* link:http://wiki.netbeans.org/HTML5[+NetBeans IDEでのHTML5サポートに関するwikiページ+]
* link:../../trails/php.html[+PHPおよびHTML5の学習+]
