投稿

【AWS】AWSコンソールのログインに二段階認証(MFA)を設定する

イメージ
AWSコンソールへのログインは通常アカウント、ユーザー名、パスワードによって認証しますが、これにMFAを加えて確実に本人しか認証できないようにするのがベターです。 昨今はセキュリティ対策として様々なシステムで二段階認証が設定できるようになっているのでこれを機に設定しておくと良いと思います。システムが変わっても方法はさほど変わらないはずです。 MFAとは MFA M ulti- F actor A uthentication 携帯電話や他のデバイスを仮想多要素認証として使用することです。 このデバイスをMFAデバイスといいます。 事前準備 ここではMFAデバイスとしてAndroid携帯を使用します。 これにより、このAndroid携帯の持ち主にしか認証できないようにするのが目的です。 認証アプリケーションをインストール 認証用のアプリとして、Google 認証システムを使います。 https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 これ以外にもいろいろありますが、現時点で使ったことはありません。 この他の認証アプリケーション Symantec製 https://play.google.com/store/apps/details?id=com.verisign.mvip.main マイクロソフト製(Azureはこれじゃないとダメらしい) https://play.google.com/store/apps/details?id=com.azure.authenticator 事前準備は以上 MFAの設定 AWSコンソールへログイン IAM ユーザーアクセスと暗号化キーの管理を開く サービスをクリックして検索窓に iam と入れると出てくる) サイドメニューからユーザーをクリック ユーザーの一覧から自分のユーザー名を探してクリック 認証情報のタブをクリック MFAデバイスの割り当ての「管理」をクリック 仮想MFAデバイスを

【GAS】Google Apps Scriptを使ってみた

イメージ
以前から気になっていましたが、個人的に今一番注目しているサービス、「Google Apps Script(以下GAS)」を使ってみたのでまとめておきます。 Google Apps Scriptとは Googleドライブ上で実行されるScriptで、様々なGoogleサービスと連携したり外部サービスにFetchできる。 また、その実行に関してはトリガーイベントやスケジューリングの設定が可能 コードはJavascriptがベース(npmは残念ながら非対応、Node.jsは使えない) 制約 主な制約については以下の記事に大変見やすくまとめられています。 https://shunsuk.com/gas-quotas/ 個人的に気になっていたのは、無料アカウントでの以下の点 URL Fetch コール数 20,000 / 日 URL Fetch レスポンスサイズ 50MB / コール URL Fetch POST サイズ 50MB / コール 無料枠でこれだけ使えれば十分でしょう。 事前準備 拡張機能Google Apps Scriptを追加 Chromeでウェブストアから拡張機能を追加します。 https://chrome.google.com/webstore/detail/google-apps-script/eoieeedlomnegifmaghhjnghhmcldobl?hl=ja コードから実行まで 新規スクリプト作成 https://script.google.com/ を開いて「新規スクリプト」 ログを出力 保存して実行する 実行するにはまず上段メニューのデバッグ(虫のボタン)で実効できます。構文エラーのときはここで弾かれます。 正常に通ったら「Ctrl + Enter」で実行できます。 フェッチとスプレッドシート操作 少し込み入った処理を書いてみる。以下は東京都の直近1時間の雨量をスプレッドシートに記録するコード function urlfetchTest() { Logger.log('Test Start'); const url = 'https://www.data.jma.go.jp/obd/stats/data/mdrr/pr

【AWS】S3へファイルアップロード(PHP)

以前書いた FuelPHPでファイルアップロード の続きで、Amazon S3へアップロードする部分をまとめます。 事前準備 SDKセットアップ composerを使ってインストールします。 以下をcomposer.jsonに追加してcomposer installを実行します。 "aws/aws-sdk-php": "^3.99" 実装 S3へアップロードする処理 ライブラリ use \Aws\Credentials\CredentialProvider; use \Aws\S3\S3Client; use \Aws\S3\Exception\S3Exception; アップロード処理 // ①認証情報を取得 $provider = CredentialProvider::defaultProvider(); // ②S3Clientを生成 $s3client = new S3Client([ 'region' => 'ap-northeast-1', 'version' => '2006-03-01', 'credentials' => $provider, ]); foreach (Upload::get_files() as $file) { // ③URLを決定 $filename = 'images/'.$file['saved_as']; // ④イメージファイルをバイナリモードで開く $image = fopen($file['saved_to'].$file['saved_as'], 'rb'); // ⑤イメージファイルのContentTypeを取得 $content_type = mime_content_type($file['saved_to'].$file['saved_as']); try{ // ⑥S3へアップロード

【PHP】多言語のデータをCSVに出力する

イメージ
多言語のテキストを含むデータをCSVファイルに出力して、さらにエクセルで開いて編集したいという要件があったのでその時の対応メモです。 多言語データの処理 データ データのイメージとしては以下です。配列に読み込まれた様々な言語のデータをファイルに出力する際の例です。 $data = [ array( 'id' => 1, 'name_ja-JP' => 'テスト', 'name_en-US' => 'test', 'name_zh-CN' => '测验', 'name_ko-KR' => '테스트', ), array( 'id' => 2, 'name_ja-JP' => '茄子', 'name_en-US' => 'eggplant', 'name_zh-CN' => '雄狮', 'name_ko-KR' => '가지', ), ]; NGケース ファイル出力処理 最初は以下のようなコードでした。 エクセルで編集という要件から、Shift-JISに変換して出力しています。 $handle = fopen('data.csv', 'w'); foreach($data as $row){ array_walk($row, function(&$item){ $item = mb_convert_encoding($item, 'Shift-JIS', 'UTF8'); }); fputcsv($handle, $row); } fclose($handle); エクセルで開く 日本語以外のマル

【AWS】Visual Studio CodeでSAMアプリケーション開発

イメージ
Visual Studio Code(以下vscode)でSAMアプリケーション開発をする手順をまとめます。 前提条件 AWS-CLIインストール済み SAM-CLIインストール済み 事前準備 vscodeにAWS Toolkitをセットアップ vscodeを立ち上げてサイドメニューのEXTENSIONSからAWS Toolkitを検索 AWS Toolkit for Visual Studio Codeをインストール サイドメニューにAWSボタンが出てくればOK アプリケーション開発 新規のSAMアプリケーションを作る サイドメニューのAWSをクリック 上段メニューから「Create new SAM Application」 Runtimeを選択(せっかくだからPython3.7を選択する) アプリケーションを配置する場所を選択 (→sam-test-2) アプリケーションの名前を入力 (→sam-test) SAMアプリケーションの作成が完了すると、template.yamlが開く デプロイ設定 template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-test Sample SAM Template for sam-test # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/mas

【AWS】SAM-CLIでサーバーレスアプリケーション② - Lambda関数のデプロイ -

SAMアプリケーションのデプロイは ビルド → テスト(省略可) → パッケージング → デプロイ の順に行います。 ビルド アプリケーションをビルドする sam build $ sam build Building resource 'HelloWorldFunction' Running NodejsNpmBuilder:NpmPack Running NodejsNpmBuilder:CopyNpmrc Running NodejsNpmBuilder:CopySource Running NodejsNpmBuilder:NpmInstall Running NodejsNpmBuilder:CleanUpNpmrc Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Invoke Function: sam local invoke [*] Package: sam package --s3-bucket [yourbucket] 成功すると .aws-sam/ にビルドされたモジュールが生成されます。 次に必要なコマンドを教えてくれる。(Commands you can use next) が、Invoke Functionはビルドしたアプリケーションをテスト実行してくださいと言っていますが、これに関してはすでに検証済み(と仮定して)なのでスキップします。 なので最後の行、sam packageでパッケージングを実行します。 パッケージング sam packageコマンドでパッケージングを実行します。 オプション options --template-file … template.yamlを指定 --s3-bucket … パッケージのアップロード先(※Lambda関数のデプロイではない) --output-template-file … デプロイ用のテンプレートファイル 実行 sam package $ sam pac

【AWS】SAM-CLIでサーバーレスアプリケーション① - プロジェクトの作成とローカルでテスト実行 -

AWSでサーバーレスアプリケーション(SAMアプリケーション)を開発する際の手順をまとめます。 はじめに サーバーレスアプリケーションとは バックグラウンドで処理をするアプリケーション(いわゆるLambda関数) SAM-CLIとは AWSの提供するクライアント用SAMコマンド(Serverless Application Model - Client) ローカルでサーバーレスアプリケーションの作成やAWSへのデプロイができる また、Dockerと組み合わせればローカルでのテスト実行が可能 公式の詳細は以下 https://aws.amazon.com/jp/serverless/sam/ この記事ではSAM-CLIを使ってLambda関数をローカルで実行する手順を紹介します。 実装 プロジェクト作成 sam init $ sam init 以下のような構成でファイルが作られる。 sam-app/ ├── README.MD ├── event.json ├── hello-world │ └── app.js │ └── package.json │ └── tests │ └── unit │ └── test-handler.js ├── template.yaml ※もちろんオプションによりプロジェクトの細かい設定が可能です。 ※デフォルトで言語はnode.jsが選択されます。(この記事でもnode.jsを使用) 言語の選択 --runtime --runtime [識別子] で言語を選択可能、以下の識別子が利用できます。 名前(言語) → 識別子 Node.js 10(Node.js) → nodejs10.x Node.js 8.10(Node.js) → nodejs8.10 Python 3.6(Python) → python3.6 Python 3.7(Python) → python3.7 Python 2.7(Python) → python2.7 Ruby 2.5(Ruby) → ruby2.5 Java 8(Java) → java8 Go 1.x(Go) → go1.x .NET Core 2.1(C#) → dotnetc

【Bootstrap4】初期設定と簡単な例

イメージ
Bootstrapを導入して表示デバイスあった画面構成をする方法をまとめました。 ここでは導入から初期設定までの手順、それから簡単なサンプルまでを作成してみます。 なお、公式ページは以下のリンクになります。サンプルが豊富に用意されているのでとても参考になります。 https://getbootstrap.jp/ 事前準備 ライブラリの配置 以下手順でBootstrapライブラリを配置します。 以下のサイトのDownload https://getbootstrap.com/ ダウンロードページの「Compiled CSS and JS」をダウンロードする zipファイルを解凍したらjs、cssのディレクトリをプロジェクトのpublicディレクトリの任意の場所へ配置する (今回はpublic/bootstrap/ 以下に配置) ヘッダー定義 Bootstrapを適用する画面のheaderタグ内に以下を記載します。 <!-- Viewportの指定 --> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrapのcss, js読み込み --> <link href="/bootstrap/css/style.css" rel="stylesheet" type="text/css"></link> <link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet"></link> <script src="/bootstrap/js/bootstrap.min.js"></script> metaタグのviewportはPC、スマホ、タブレットなど異なるデバイスでも、デバイス自体の横幅に合わせてコンテンツを合わせて表示しますよ、という設定です。 linkとscriptは配置したライブラリを読

【PHP】FuelPHPでファイルアップロード

FuelPHPでファイルをアップロードする方法をまとめます。 以下の公式ページを参考に実装しました。 http://fuelphp.jp/docs/1.8/classes/upload/usage.html 要件 inputタグで指定されたファイルをアップロードする ファイル名はハッシュ値に置き換える ファイルの最大サイズは1MB ファイル拡張子はjpeg, jpg, gif, pngのみ許可 エラーは発生した時点で例外とする 実装 フロント側 Submit form内に以下を追加します。 <input type="file" name="image" accept="image/*" /> サーバー側実装 モジュール定義 FuelPHPのコアライブラリを使用するので以下を追加します。 use \Fuel\Core\Upload; アクションの実装 // アップロードファイルの設定 Upload::process(array( 'path' => '/var/tmp', 'overwrite' => true, 'randomize' => true, 'max_size' => 1000000, 'ext_whitelist' => array( 'jpeg', 'jpg', 'gif', 'png' ) )); // アップロードファイルの検証と保存 if (Upload::is_valid()) { // 画像アップロード成功の場合、設定を元に保存 for($i = 0; $i < count(Upload::get_files()); $i++) { Upload::save($i); } } // ファイルアップロードエラー fo

【PHP】Gmail認証 - ログインと認証チェック -

イメージ
Gmailを使ってGoogle認証APIでログインを実装する方法、またログイン後の認証チェックを実装してみます。 前提としてGoogle APIsコンソール(以下URL)からサービスキーを発行します。 https://console.developers.google.com/apis/dashboard ※なお今回FuelPHPを使って実装していますが、フレームワークの特別な機能は特に使用していません。 事前準備 サービスキー発行 Google APIsコンソールへサインイン https://console.developers.google.com/?hl=JA Google APIsコンソールの左側メニュー → 認証情報 → 認証情報を作成 → OAuth クライアント ID 必要項目を入力 名前 任意のアプリケーション名を入力 承認済みの JavaScript 生成元 今回は使用しません 承認済みのリダイレクト URI 認証後にGoogleからコールバックされるエンドポイント 保存ボタンで client_id と client_secret が発行される ※OAuth同意画面でアプリケーションのスコープを指定することができます。これを内部にすると、組織内のGmailアカウントに限定されるので、社内システムなどの開発で使用する際はではチェックすると良いです。 ログイン処理 Google Api Key設定ファイル fuel/app/config/test/apikeys.php 事前準備で発行したclient_idとclient_secretを設定ファイルへ定義します。 <?php /** * Google API Keys */ return array( 'client_id' => '00000000-xxxxxxxx.apps.googleusercontent.com',

【PHP】FuelPHP - Model_Crudの作り方と使い方

FuelPHPにおける Model_Crud とはいわゆるORマッパーと呼ばれるもので、テーブルにおけるCRUD操作を劇的に簡単にします。 今回はこれとMySQLを使ってかんたんなCRUD処理を作ってみます。 データベース 使用するテーブル 以下のようなテーブルを用意しました。 定義 >SHOW CREATE TABLE products; CREATE TABLE `products` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID', `name` varchar(16) DEFAULT NULL COMMENT '商品名', `price` varchar(16) DEFAULT NULL COMMENT '価格', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'レコード作成日', `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'レコード更新日', `is_deleted` tinyint(1) DEFAULT '0' COMMENT '削除フラグ', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品マスタ'; データ >SELECT * FROM products; +----+-----------+-------+---------------------+------------+------------+ | id | name | price | created_at | updated_at | is_deleted | +----+-----------+-------+---------------------+------------+------------+ | 1 | りんご | 10

【PHP】PHPでWebSocketサーバー - クライアント・サーバー間通信 -

イメージ
前回の記事 でPHPにより実装したWebSocketサーバーを介してのクライアント間通信を実装しました。 今回はサーバー側から一方的にクライアントへメッセージを送信してみたいと思います。 使用するライブラリは以下を使用しましたが、結果を先に言ってしまうとelephant.ioのほうはうまく行きませんでした。以下にその手順と結果を残しておきます。 wisembly/elephant.io textalk/websocket サーバーからメッセージ送信 (wisembly/elephant.io) ライブラリのインストール composer.json composer.json の require に以下を追加 "wisembly/elephant.io":"~3.0" 以下コマンドでインストール $ ./composer.phar update --lock Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing wisembly/elephant.io (v3.3.1): Loading from cache Package guzzle/common is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/http is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/parser is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/stream is abandoned, you should avoid using it. Use guzzle/guzzle instead.

【PHP】PHPでWebSocketサーバー - クライアント間の通信 -

イメージ
以下の記事を参考にWebSocketをサーバーを立てて、docker+FuelPHP上で実行してみました。 http://madroom-project.blogspot.com/2013/04/phpwebsocket.html なお、FuelPHPについてフレームワークとしての機能は使用していませんので、どんなフレームワークを使っても同じ方法で行けると思います。 ライブラリのインストール composer.json の require に以下を追加 "cboden/Ratchet": "0.2.*" 以下コマンドでインストール $ ./composer.phar update --lock Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing textalk/websocket (1.0.3): Loading from cache Package guzzle/common is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/http is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/parser is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/stream is abandoned, you should avoid using it. Use guzzle/guzzle instead. Writing lock file Generating autoload files 実装 WebSocketサーバー側 以下をプロジェクトの適当なディレクトリに配置します。(requ

【js】ブラウザの言語設定により表示する文字を切り替える

イメージ
Javascriptを利用してブラウザで設定されている言語を取得し、言語によって表示を切り替える方法をまとめます。 Javascriptでブラウザの言語設定を取得する方法は、使用するブラウザによって異なります。 これは以下の記事を参考にしました。 https://easyramble.com/get-language-setting-by-javascript.html 方法としてはonloadでブラウザの言語設定を取得して、あらかじめ2パターン用意した記述の片方を非表示にします。 実装 ブラウザの言語設定取得 language_test.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Laungage Test</title> <style type="text/css"> <!-- #body { margin-left: 1em; margin-right: 1em; } --> </style> <script> window.onload = function() { var language; if (navigator.browserLanguage != null) { // Internet Explorer, Opera, 他 language = navigator.browserLanguage.substr(0, 2); } else if(navigator.userLanguage != null) { // Internet Explorerの場合 language = navigator.userLanguage.substr(0, 2); } else if(navigator.language != null) { // Chro

【git】git操作まとめ

gitについてよく使う操作をまとめました。 ブランチ操作 作業ブランチの作成と削除をよく使うのでメモしておきます。 以下はmasterを派生元ブランチとして作業ブランチを作成する場合の例です。 作業ブランチの作成 # masterブランチへ切り替え git checkout master # ローカルブランチがmasterに切り替わっていることを確認する git branch # ローカルに開発ブランチを作成する git branch develop/xxxxx # サーバーにプッシュする git push origin develop/xxxxx # ローカルに作ったブランチを削除する git branch -D develop/xxxxx # 中央リポジトリへ追加する # これをすることで他の作業者がこのブランチが見れるようになる git branch --track develop/xxxxx origin/develop/xxxxx # ローカルブランチを切り替える git checkout develop/xxxxx 不要になったブランチを削除 # ローカルブランチを削除 git branch -D develop/xxxxx # 中央リポジトリからブランチを削除 git push origin :develop/xxxxx タグに関する操作 タグ付け # ローカルでタグを付ける git tag release_v1.0 # ローカルで付けたタグをサーバーへ反映 git push origin release_v1.0 タグを削除 # ローカルでタグを削除 git tag -d release_v1.0 # リモートのタグを削除 git push origin :release_v1.0 タグの一覧表示 # ローカルのタグ一覧を表示 git tag # リモートのタグ一覧を表示 git ls-remote --tags タグをチェックアウト # タグをチェックアウト git checkout refs/tags/[タグ名] コミットの取り消しとリモート反映 リモートにプッシュしてしまったコミットを取り消す方法 コミットIDの取得 git log 等で戻したいコミットのコミットIDを

【Android】Realmの基礎 - 検索・追加・更新・削除 -

イメージ
Androidアプリケーションで、Realmを使ったデータの取り扱いについてまとめました。 Realmとは モバイルデバイス向けのデータベースです。Realmが登場するまではSQLiteなどが一般的でした。 もっと詳しくという人は、こちらの記事が分かりやすいと思います。 https://mynavi-agent.jp/it/geekroid/2015/03/realm-realm-tech-talk-.html 実装 ライブラリを追加 app/build.gradle dependenciesに以下の2行を追加して同期します。 implementation 'io.realm:realm-android:+' annotationProcessor 'io.realm:realm-android:+' データ型の定義について データ型はRealmObjectを継承したクラスによって定義します。 これはデータベースで言うところのテーブルに当たります。 ここではIDと名前の2項目を持った単純なテーブルを作ります。 import io.realm.RealmObject; public class Item extends RealmObject{ private int id; private String name; public void setId(int id) { this.id = id; } public int getId() { return id; } public void setName(String name) { this.name = name; } public String getName() { return name; } } Realmインスタンスを取得 インスタンスの取得は以下で行います。 以降このインスタンスを使って検索・追加・更新・削除を行います。 Realm realm = Realm.getInstance(this); データの検索 // 登録データ全件を取得する RealmResults

【Android】LocationListenerで位置情報を取得する

イメージ
GPSから位置情報を利用したアプリがよくありますが、LocationListenerを使えば緯度・経度や、高度などが取得できます。 ということでここでは、AndroidでLocationListenerを使った位置情報の取得についてまとめてみます。 実装 権限を追加 AndroidManifest.xml 以下の権限を追加します。なお、アプリケーションから権限のについては備考にまとめた記事のリンクをご確認ください。 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ACCESS_COARSE_LOCATIONはネットワーク経由で位置情報を取得するのに必要な権限です。 そのためINTERNETの権限も必要になります。 ACCESS_GPSとACCESS_FINE_LOCATIONは、GPSを使用した位置情報を取得するのに必要な権限です。 位置情報の取得処理 MainActivity.java Activityで実装した場合の単純な例が以下になります。 public class MainActivity extends AppCompatActivity implements LocationListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ

【Android】アプリケーションから権限の取得方法

イメージ
Androidアプリケーションがデバイスの機能へアクセスする場合、利用者に権限を許可してもらう必要があります。 デバイスの機能とは以下のようなものです。 連絡先 位置情報 内部ストレージ カメラ etc ・・・ ここでは連絡先を利用するアプリケーションを作ると想定して、どのように実装するのかをまとめます。 実装 対象権限の追加 AndroidManifest.xml AndroidManifest.xmlに取得したい権限を追加します。 <uses-permission android:name="android.permission.READ_CONTACTS" /> 権限を貰うための処理 MainActivity.java public class MainActivity extends AppCompatActivity { /** * onCreate * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // このアプリケーションに連絡先にアクセスする権限が許可されているかチェック if (PermissionChecker.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS,}, 0); } else{ ((TextView) findV

Acer Chrome Book を使ってみた感想

イメージ
ミーティング用のノートPCが欲しいと思い Acer Chromebook C730E-N12M を購入しました。 まずはChrome Bookについて簡単に説明します。 外観 特徴 WindowsでもMacでもLinuxでもないGoogle社が開発したChrome OSを搭載 Chromeブラウザで全ての作業を行う 基本的にオンライン前提 最近はChromeブラウザ用のアプリも増えてきているので何でも出来るといっても過言ではないかもしれません。 以下に(あくまで自分が感じた)メリット/デメリットをまとめてみました。 メリット(便利だと思った点) ブラウジングが快適 三本指の左右スライドでタブ移動、二本指の上下スライドでスクロール、ネットサーフィンが捗ります。 ウイルス対策の必要が無い 必要がないと言うと語弊かもしれませんが、Chromeブラウザにあらかじめ組み込まれているセキュリティ対策機能が常に最新にアップデートされます。 ただしChromeウェブストアには入力情報や閲覧履歴を収集するようなスパイウェアと呼ばれるアプリが少なからず存在するようです。 WebストアからGoogle社製以外のアプリをインストールする際は注意しましょう。 起動の早さ、バッテリ駆動時間、堅牢性 これはChrome Bookの特徴であり、多くの方が書かれています。 起動というか落とす必要がないので基本的に開ければすぐに使えます。 バッテリも私の場合は1日使っても1、2時間ぐらいですが1週間ぐらいは持ちます。 堅牢性はこの機種の特徴ですが、非常に丈夫(そう)な作りとなっています。 デメリット(困った点) パスワード付きのエクセル(Office系ドキュメント)が開けない これが今一番困ってます。 おそらくOffice系ドキュメント全般だと思うんですが、現在対応中だそうです。 毎日持ち歩くには少々重い 重量約1.4kgですが最近のノートPCと比べると少々重いです。 これは堅牢製を売りにした機種なのでその対価といえるでしょう。 他のChrome Bookは軽量な機種もたくさんあります。 総評 ★★★★☆ (デメリットの1が解決したなら★5です) コストパフォーマンスを考えると非常に満足し