diff --git a/ja/ebook/06.1.md b/ja/ebook/06.1.md index 46369e27..6107f369 100644 --- a/ja/ebook/06.1.md +++ b/ja/ebook/06.1.md @@ -92,7 +92,7 @@ sessionメカニズムはサーバサイドのメカニズムです。サーバ sessionメカニズム自身は特に複雑ではありませんが、その実装と設定の柔軟性は複雑を極めます。これは一回の経験やひとつのブラウザ、サーバのみの経験でもって普遍的に通用するものではありません。 -## 概要 +## まとめ 上述の通り、sessionとcookieの目的は同じです。どちらもhttpプロトコルのステートレスであるという欠点を克服するためにあります。しかしその方法は異なります。sessionはcookieを通じてクライアントにsession idを保存します。またユーザの他のセッション情報はサーバのsessionオブジェクトに保存されます。これとは対照的に、cookieはすべての情報をクライアントに持たせる必要があります。そのためcookieにはある程度潜在的な脅威が存在します。例えばローカルのcookieに保存されたユーザ名とパスワードが解読されたり、cookieが他のホームページに収集されます(例えば:1.appAが主導的にゾーンBのcookieを設定し、ゾーンBにcookieを取得させます;2.XSS、appAでjavascriptを通じてdocument.cookieを取得し、自分のappBに送信します)。 diff --git a/ja/ebook/06.2.md b/ja/ebook/06.2.md index 1ed609fa..d295d71b 100644 --- a/ja/ebook/06.2.md +++ b/ja/ebook/06.2.md @@ -206,7 +206,7 @@ Webアプリケーションにはユーザのログアウト操作がありま GCが十分にtimeパッケージのタイマー機能を利用していることがおわかりいただけるかと思います。時間が`maxLifeTime`を超えた後GC関数をコールした際、これによって`maxLiefTime`時間内でsessionが利用できることを保証できます。このような方法はまたオンラインユーザの数といった統計に用いることもできます。 -## 概要 +## まとめ これまでに、WebアプリケーションにおけるグローバルなSession管理に用いられるSessionManagerを実装してまいりました。Sessionを提供するために用いられるストレージを定義し、Providerのインターフェースを実装しました。次の節では、インターフェースの定義を通してProviderを実装します。ぜひご参考ください。 ## links diff --git a/ja/ebook/07.4.md b/ja/ebook/07.4.md index f8df1f45..4ad39ce7 100644 --- a/ja/ebook/07.4.md +++ b/ja/ebook/07.4.md @@ -341,7 +341,7 @@ Webアプリケーションを作る時はテンプレートの一部が固定 >単一の集合のようなテンプレートは互いを知っています。もしあるテンプレートが複数の集合によって使用された場合、複数の集合の中で別々にパースされる必要があります。 -## 概要 +## まとめ テンプレートに対する上記の詳細な紹介で、どのようにして動的なデータとテンプレートを融合させるかご理解いただけたかと思います:ループしたデータの出力、関数を定義、テンプレートのネスト等々。テンプレートの技術を応用することで、MVCパターンのVの処理を完成させることができます。以降の章ではどのようにMとCを処理するかご紹介します。 ## links diff --git a/ja/ebook/08.1.md b/ja/ebook/08.1.md index 059d6c3a..5bc48fe6 100644 --- a/ja/ebook/08.1.md +++ b/ja/ebook/08.1.md @@ -386,7 +386,7 @@ UDPサーバがどのように処理するか見てみましょう; } } -## 概要 +## まとめ TCPとUDP Socketプログラミングの描写と実装を通して、GoはすでにSocketプログラミングを完全にサポートしていることがお分かりいただけたかと思います。使用に際してもとても便利です。Goはたくさんの関数を提供しています。これらの関数を使って簡単に高性能なSocketアプリケーションを書くことができます。 diff --git a/ja/ebook/08.3.md b/ja/ebook/08.3.md index abef201b..c904b3f5 100644 --- a/ja/ebook/08.3.md +++ b/ja/ebook/08.3.md @@ -106,7 +106,7 @@ GoにはRESTに対する直接のサポートはありません。しかし、RE 上のコードではどのようにRESTなアプリケーションを書くかご覧いただきました。我々がアクセスするリソースはユーザです。異なるmethodによって異なる関数にアクセスしました。ここではサードパーティライブラリ`github.com/drone/routes`を使用しています。前の章でどのように自分で定義したルータを実現するかご紹介しました。このライブラリは自分で定義したルートと便利なルートのルールを反映させます。これを使って簡単にRESTのフレームワークを実装することができます。 -## 概要 +## まとめ RESTはフレームワークスタイルの一種です。WWWの成功経験を汲み取っています:ステートレス、リソースを中心とし、HTTPプロトコルとURIプロトコルを十分利用しています。統一したインターフェース定義を提供し、Webサービスを設計する方法の一つとして流行しました。ある意味で、URIとHTTPといった黎明期のInternet標準を強調することで、RESTは大型のアプリケーションプログラムサーバ時代の前のWeb方式に回帰しています。現在GoはRESTに対するサポートはやはり簡単です。自分dね定義したルーティングを通して、異なるmethodに異なるhandleを実装することができます。このようにRESTのフレームワークは実現されています。 ## links diff --git a/ja/ebook/08.4.md b/ja/ebook/08.4.md index f503908e..a23e44a9 100644 --- a/ja/ebook/08.4.md +++ b/ja/ebook/08.4.md @@ -381,7 +381,7 @@ json-rpcはTCPプロトコルにもとづいて実装されていることがお } -## 概要 +## まとめ GoはすでにRPCに対して良いサポートを提供しています。上のHTTP、TCP、JSON RPCの実装を通して、多くの分散型のWebアプリケーションの開発を簡単に行うことができます。読者であるあなたはすでにここまでマスターしたものと思われます。ただ残念なことに現在GoはまだSOAP RPCのサポートを提供していません。幸い現在すでにサードパーティのオープンソースで実現されています。 diff --git a/ja/ebook/09.1.md b/ja/ebook/09.1.md index f037ff02..25ef0df6 100644 --- a/ja/ebook/09.1.md +++ b/ja/ebook/09.1.md @@ -84,7 +84,7 @@ tokenを検証 このように基本的には安全なPOSTを実現しました。しかしもしtokenのアルゴリズムが暴かれてしまったらと思われるかもしれません。しかし理論上は破られることは基本的に不可能です。ある人が計算したところ、この文字列を無理に破るにはだいたい2の11乗の時間が必要です。 -## 概要 +## まとめ クロスサイトリクエストフォージェリ、すなわちCSRFは非常に危険なWebセキュリティ問題です。Webセキュリティ界隈では"眠れる巨人"と呼ばれています。リスクレベルはこの"肩書き"を見ればお分かりでしょう。この節ではクロスサイトリクエストフォージェリの紹介にとどまらず、このようなセキュリティホールを生み出す原因の所在についても詳しくご説明しました。これでもって攻撃への防御を促し、読者に安全なWebアプリケーションを書いていただけますよう望んでいます。 ## links diff --git a/ja/ebook/09.2.md b/ja/ebook/09.2.md index b622a120..10f09127 100644 --- a/ja/ebook/09.2.md +++ b/ja/ebook/09.2.md @@ -63,7 +63,7 @@ CleanMap["username"] = username } -## 概要 +## まとめ データのフィルタリングはWebセキュリティにおいて基礎となる作用です。多くのセキュリティ問題はデータのフィルタリングと検証を行わなかったことによるものです。例えば前の節のCSRF攻撃と以降に説明するXSS攻撃、SQLインジェクション等はどれも真面目にデータをフィルタリングしなかった事によって引き起こされます。そのため、この部分の内容は特に重視する必要があります。 ## links diff --git a/ja/ebook/09.3.md b/ja/ebook/09.3.md index d7a45358..76a58de9 100644 --- a/ja/ebook/09.3.md +++ b/ja/ebook/09.3.md @@ -43,7 +43,7 @@ XSSに関するより詳しい分析は"[新浪微博XSS事件分析](http://www このようにすることでブラウザにhtmlを出力させずjavascriptコードを解釈させることができます。 -## 概要 +## まとめ XSSセキュリティホールはとても危険なものです。Webアプリケーションを開発している時、必ずデータをフィルタリングするよう肝に銘じておいてください。特にクライアントに出力する前に。これは現在のところXSSを防止する手段として有効です。 ## links diff --git a/ja/ebook/09.4.md b/ja/ebook/09.4.md index ebef3511..531dafb8 100644 --- a/ja/ebook/09.4.md +++ b/ja/ebook/09.4.md @@ -60,7 +60,7 @@ SQLインジェクション攻撃の被害はこれだけ大きく、どのよ 5. アプリケーションをデプロイする前になるべく専門のSQLインジェクション検査ツールを使って検査を行い、発見されたSQLインジェクションセキュリティホールにはすぐにパッチをあてる。ネット上ではこの方面のオープンソースツールがたくさんあります。例えばsqlmap、SQLninja等です。 6. ページがSQLのエラー情報を出力するのを避ける。例えば型のエラー、フィールドのミスマッチ等です。コードのSQLクエリが暴露されることで攻撃者がこれらのエラー情報を利用してSQLインジェクションを行うのを防ぎます。 -## 概要 +## まとめ 上の例によってSQLインジェクションは被害が相当大きいセキュリティホールであるとわかりました。そのため我々が通常書くWebアプリケーションに対してはどのような小さな事でも非常に重視する必要があります。小さな事が命運を分けます。生活も同じ、Webアプリケーションを書くことも同じです。 ## links diff --git a/ja/ebook/09.5.md b/ja/ebook/09.5.md index 2e76ad96..4e1c5019 100644 --- a/ja/ebook/09.5.md +++ b/ja/ebook/09.5.md @@ -77,7 +77,7 @@ Go言語のこの三種類の暗号化アルゴリズムの実装は以下の通 上の方法によってユニークな対応するパスワードの値を取得することができます。これは現在までもっともクラックが難しいものです。 -## 概要 +## まとめ ここまででもしあなたに危機感が芽生えたのだとすれば、行動すべきです: - 1)もし普通のユーザであれば、LastPassによってパスワードを保存/生成するのをおすすめします。異なるサイトで異なるパスワードを使用します。 diff --git a/ja/ebook/09.6.md b/ja/ebook/09.6.md index fd531ddc..43a93b9d 100644 --- a/ja/ebook/09.6.md +++ b/ja/ebook/09.6.md @@ -112,7 +112,7 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー この3つの関数は暗号化/復元操作を実現します。詳細な操作は上の例をご覧ください。 -## 概要 +## まとめ この節ではいくつかの暗号化/復元アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/複合を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。 diff --git a/ja/ebook/10.1.md b/ja/ebook/10.1.md index 2d773311..67321228 100644 --- a/ja/ebook/10.1.md +++ b/ja/ebook/10.1.md @@ -76,7 +76,7 @@ URLアドレスをもっとRESTfulな見た目にしたいと思うかもしれ 当然ユーザにあなたが提供するセレクトボックスや他の何らかの方法で対応するlocaleを設定させることもできます。ユーザの入力した情報を、このアカウントに関連するprofileに保存し、ユーザが再度ログインした時にこの設定をlocale設定にコピーします。これによってこのユーザの毎回のアクセスで自分が以前に設定したlocaleをもとにページを取得するよう保証することができます。 -## 概要 +## まとめ 上のご紹介から、Localeの設定にはいくつもの方法があるとわかりました。要求の違いによって異なるLocaleの設定方法を選択する必要があります。ユーザが最もよく知る方法で我々が提供するサービスを得る事で、アプリケーションのユーザビリティを高めます。 ## links diff --git a/ja/ebook/10.2.md b/ja/ebook/10.2.md index f302f9d6..e693acb2 100644 --- a/ja/ebook/10.2.md +++ b/ja/ebook/10.2.md @@ -125,7 +125,7 @@ Localeの違いによってビューを表示させる場合もあるかもし このような方法を採用することでビューとリソースをローカライズすると、用意に拡張を行うことができます。 -## 概要 +## まとめ この節ではどのようにしてローカライズリソースを使用し、保存するかご紹介しました。ある時は置換関数によって実装する必要があり、またある時はlangによって設定する必要があります。しかし最終的にはどれもkey-valueの方法によってLocaleに対応したデータを保存することになります。必要な時に対応するLocaleの情報を取り出して、もしそれがてkしうと情報であれば直接出力し、もし時間や日時または通過であった場合は`fmtPrintf`を使ったりその他のフォーマッタ関数によって処理する必要があります。異なるLocaleのビューとリソースに対しては最も簡単で、パスにlangを追加するだけで実装することができます。 ## links diff --git a/ja/ebook/10.3.md b/ja/ebook/10.3.md index e09f9dd0..dea1ecda 100644 --- a/ja/ebook/10.3.md +++ b/ja/ebook/10.3.md @@ -171,7 +171,7 @@ {{.V.Money | M}} -## 概要 +## まとめ この節を通して多言語パッケージのWebアプリケーションをどのようにして実現するかわかりました。カスタム言語パッケージでは便利に多言語を実装することができます。また、設定ファイルによって非常に簡単に複数の言語を拡張することもできます。デフォルトではgo-i18nはパブリックな設定ファイルをロードします。例えば時間、通貨等です。非常に簡単に使用することができ、同時にテンプレートにおいてこれらの関数をサポートするため、対応するテンプレート関数も実装しました。このようにしてWebアプリケーションを開発する際直接テンプレートにおいてpipelineの方法で多言語パッケージを操作することができます。 ## links diff --git a/ja/ebook/11.1.md b/ja/ebook/11.1.md index f1bd07ae..3ac48715 100644 --- a/ja/ebook/11.1.md +++ b/ja/ebook/11.1.md @@ -191,7 +191,7 @@ Goはエラー処理においてCに似た戻り値を検査する方法を採 上で示したとおり、viewにアクセスした際異なる状況によって異なるエラーコードとエラー情報を取得することができます。これははじめのバージョンに比べてコード量にさほど変化はありませんが、これが表示するエラーはよりわかりやすくなっています。提示されるエラー情報のユーザビリティが高められ、拡張性もはじめのものに比べてよくなっています。 -## 概要 +## まとめ プログラムの設計において障害の許容は重要な仕事の一部です。Goではエラー処理によってこれを実現します。errorはひとつのインターフェースに過ぎませんが、多くに変化させることができます。自分の需要に合わせて異なる処理を実装することができます。最後にご紹介したエラー処理の方法で、皆様によりよいWebエラーの処理の方法を設計するにあたってご助力になれば幸いです。 ## links diff --git a/ja/ebook/11.2.md b/ja/ebook/11.2.md index 1c6c1728..42c06e9d 100644 --- a/ja/ebook/11.2.md +++ b/ja/ebook/11.2.md @@ -240,7 +240,7 @@ GDBが実行している現在のプログラムの環境ではいくつかの goroutinesのコマンドを確認することでgoroutineの内部がどのように実行されているのか詳しく理解することができます。各関数のコールされる順番はすでにはっきり表示されています。 -## 概要 +## まとめ この章ではGDBデバッグにおけるGoプログラムの基本コマンドのいくつかをご紹介しました。`run`、`print`、`info`、`set variable`、`continue`、`list`、`break`といったよく使われるデバッグコマンドを含め、上のデモで行ったように、読者はすでにGoプログラムに対してGDBを使ったデバッグを基本的に理解したものと信じています。もしより多くのデバッグテクニックを知りたければオフィシャルのページのGDBデバッグの項目をご参照ください。 ## links diff --git a/ja/ebook/11.3.md b/ja/ebook/11.3.md index 16d4477f..b068a0f8 100644 --- a/ja/ebook/11.3.md +++ b/ja/ebook/11.3.md @@ -139,7 +139,7 @@ Go言語はあらかじめ用意されている軽量なテストフレームワ 上の結果は我々がどのような`TestXXX`なユニットテスト関数も実行していないことを示しています。表示される結果は耐久テスト関数のみを実行しただけです。第一行には`Benchmark_Division`が500000000回実行され示し、毎回の実行が平均で7.76ミリ秒であったことを示しています。第二行は`Benchmark_TimeConsumingFunctin`が500000000回実行され、毎回の平均実行時間が7.80ミリ秒であったことを示しています。最後の1行は全体の実行時間を示しています。 -## 概要  +## まとめ  上のユニットテストと耐久テストの学習を通じて、`testing`パッケージが非常に軽量で、ユニットテストと耐久テストを書くのは非常に簡単であるとわかりました。ビルトインの`go test`コマンドを組み合わせることで、非常に便利にテストを行うことができます。このように我々が毎回コードを修正し終わる度に、go testを実行するだけで簡単に回帰テストを行うことができます。 diff --git a/ja/ebook/12.1.md b/ja/ebook/12.1.md index c15adc72..7dda8e08 100644 --- a/ja/ebook/12.1.md +++ b/ja/ebook/12.1.md @@ -157,7 +157,7 @@ seelogはカスタムなログ処理の定義をサポートしています。 このような方法によって簡単に対応する情報を探し出すことができます。これにはアプリケーションログに対して統計と分析を行えるという利点があります。また、ログのサイズを考慮する必要もあります。高トラフィックのWebアプリケーションにとって、ログの増加は恐るべきものです。そのため、seelogの設定ファイルでlogrotateを設定することで、ログファイルが絶え間なく増大し我々のディスクスペースが足りなくなるといった問題を引き起こさないよう保証することができます。 -## 概要 +## まとめ 上のseelogシステムとこれに基づいてどのようにログシステムを定義するかを学ぶことによって、非常に気軽に強力で適切な機能を持つログシステムを作成できることができました。ログシステムはデータ分析に信用できるデータソースを提供します。例えばログの分析を通して、システムをより一歩改善することができますし、アプリケーションに問題が発生した時に問題の位置を特定しやすくなります。また、seelogはログのレベル分け機能もサポートしています。minlevelの設定によって簡単にテストや配布版の出力情報のレベルを設定することができます。 ## links diff --git a/ja/ebook/12.2.md b/ja/ebook/12.2.md index 6ba2539d..3e1c0d05 100644 --- a/ja/ebook/12.2.md +++ b/ja/ebook/12.2.md @@ -116,7 +116,7 @@ 上ではエラーと例外の区別をご紹介しました。我々がプログラムを開発する時はどのように設計すべきでしょうか?ルールは非常に簡単です:もしあなたが定義した関数が失敗する可能性があるなら、エラーを返さなければなりません。他のpackageの関数をコールする時、もしこの関数の実装がとてもよい場合、panicの心配をする必要もありません。本当に例外を発生させなければならない状況ではないのに発生させてしまっているにしても、私がこれを処理するいわれはないはずです。panicとrecoverは自分が開発したpackageで実装されたロジックや、特殊な状況に対して設計されます。 -## 概要 +## まとめ この節では我々のWebアプリケーションをデプロイした後どのようにして各種のエラーを処理するかについてまとめました:ネットワークエラー、データベースエラー、オペレーティングシステムのエラー等、エラーが発生した際、我々のプログラムはどのようにして正しく処理するのでしょうか:ユーザフレンドリーなエラーインターフェースを表示し、操作をロールバックし、ログを記録し、管理者に通知するといった操作を行います。最後にどのようにしてエラーと例外を正しく処理するかについてご紹介しました。一般的なプログラムにおいてはエラーと例外はよく混同されます。しかし、Goではエラーと例外は常に明確な区別がなされます。そのため、我々がプログラムを設計するにあたってエラーと例外を処理する際はどのような原則に従うべきかについてご紹介しました。 ## links * [目次]() diff --git a/ja/ebook/12.3.md b/ja/ebook/12.3.md index 241a0dd4..a3cb3107 100644 --- a/ja/ebook/12.3.md +++ b/ja/ebook/12.3.md @@ -171,7 +171,7 @@ Supervisordをインストールするとsupervisorとsupervisorctlという2つ - supervisorctl stop all、すべてのプロセスを停止します。注:start、restart、stopは最新の設定ファイルを読み込みません。 - supervisorctl reload、最新の設定ファイルを読み込み、新しい設定に沿ってすべてのプロセスを起動、管理します。 -## 概要 +## まとめ この節ではGoがどのようにdaemon化を実現しているのかについてご紹介しました。ただ現在Goのdaemon実装は不足しており、サードパーティのツールによるアプリケーションプログラムのdaemon管理を行う方法に頼る必要があります。そのためここではpythonで書かれたプロセス管理ツールSupervisordをご紹介しました。Supervisordを使って簡単にGoアプリケーションプログラムを管理することができます。 diff --git a/ja/ebook/12.4.md b/ja/ebook/12.4.md index 545fad5d..c9d3c770 100644 --- a/ja/ebook/12.4.md +++ b/ja/ebook/12.4.md @@ -165,7 +165,7 @@ redisのリストアはホットバックアップとコールドバックアッ しかし時にはコールドバックアップによってデータをリストアする必要もあります。redisのコールドバックアップは実は保存されたデータベースファイルをredisのワーキングディレクトリにコピーするだけです。その後redisを起動すればOKです。redisは起動している間自動的にデータベースファイルをメモリにロードします。起動の速度はデータベースのファイルの大小によって決定します。 -## 概要 +## まとめ この節ではアプリケーションのバックアップとリストアについてご紹介しました。ファイルのバックアップからデータベースのバックアップまで、どのように災害に対応するかです。また、rsyncを使った異なるシステムでのファイルの同期についてもご紹介しました。MySQLデータベースとredisデータベースのバックアップとリストアです。この節の紹介を通して開発された本番プロダクトの障害に対するひとつの参考になれば幸いです。 ## links diff --git a/ja/ebook/13.1.md b/ja/ebook/13.1.md index 5d157fed..e26589c6 100644 --- a/ja/ebook/13.1.md +++ b/ja/ebook/13.1.md @@ -45,7 +45,7 @@ ## フレームワーク設計 ブログの迅速な作成を実現するため、上のプロセス設計に従って最小化されたフレームワークを開発します。フレームワークにはルーティング機能、RESTをサポートしたコントローラ、自動化とテンプレートの適用、ログシステム、設定管理等が含まれます。 -## 概要 +## まとめ この節ではブログシステムにおいてGOPATHを設定するところからディレクトリの作成といった基礎情報までをご紹介しました。フレームワークの構造がMVCモードを採用することや、ブログシステムのデータフローの実行プロセスについても簡単にご紹介しました。最後にこれらのプロセスを通じてブログシステムのディレクトリ構造を設計しました。ここまでで、フレームワークの基本的な作成が完了しました。以降のいくつかの節ではひとつひとつ実装していきます。 ## links * [目次]()