20190512のMacに関する記事は10件です。

puppeteerを体験してみた

puppeteer とは、GUIを操作することなく、プログラムからAPIでブラウザ(Chrome)を制御できる Node.js で作られたライブラリです。
https://webbibouroku.com/Blog/Article/puppeteer

何ができるのか
- 自動でchromeを立ち上げて検索し、要素をとってくる
- 検索結果のスクショをとったり
- webサイトにログインしたり
- 自動テストを走らせてslackに結果を表示したりもできる

1. node.jsのインストール

参考にしたサイト
https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09

【手順】
- Homebrewを使用してnodebrewをインストール

$ brew install nodebrew

  • パスを通す

$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile

  • ターミナルを再起動

  • ディレクトリを作成して
    $ mkdir -p ~/.nodebrew/src

-最新のバージョンをインストール
$ nodebrew install-binary latest

-バージョンの有効化
$ nodebrew use v7.1.0

バージョンの確認で以下のように表示されたらOK

$node -v
>v12.2.0

2.puppeteerのインストール

参考にしたサイト
https://www.wakuwakubank.com/posts/620-javascript-puppeteer/

$ npm install --save puppeteer

3. 使ってみる

sample.jsを作成

sample.js
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({
        headless: false,  // ブラウザが動く様子を確認する
        slowMo: 300  // 動作確認しやすいようにpuppeteerの操作を遅延させる
    })
    const page = await browser.newPage()

    //chromeを開く
    await page.goto('https://www.google.com/')
    // 検索窓に「こんにちは」と入力
    await page.type('input[name=q]', 'こんにちは', { delay: 50 }) 
    //検索
    await page.click('input[type="submit"]')
    //スクリーンショット
    await page.screenshot({ path: 'screenshot/sample1.png' })

    await browser.close()
})()

上記ファイルが置いてあるディレクトリに移動して、
スクリーンショットを保存するフォルダを作成
$ mkdir screenshot

いざ、実行
$node sample.js

自動でchromeがたちあがり、検索してくれる
スクリーンショット 2019-05-12 12.31.12.png

スクリーンショットが保存されている
スクリーンショット 2019-05-12 12.31.33.png

自動でtwitterにログインしてみる

以下のサンプルコードを参考にしました
https://github.com/checkly/puppeteer-examples

環境変数でユーザー名とパスワードを設定

config.json
{
"TWITTER_USER": "ユーザー名",
"TWITTER_PWD": "パスワード"
}

gitにpushする際は上記ファイルを除外します

twitter.js
const puppeteer = require('puppeteer');
const {TWITTER_USER, TWITTER_PWD} = require('./config.json');

(async () => {
    const browser = await puppeteer.launch({
        headless: false,
        slowMo: 300
    })
    const page = await browser.newPage()
    await page.setViewport({ width: 1280, height: 800 })

    const navigationPromise = page.waitForNavigation()

    await page.goto('https://twitter.com/')
    await page.waitForSelector('.StaticLoggedOutHomePage-cell > .StaticLoggedOutHomePage-login > .LoginForm > .LoginForm-username > .text-input')
    await page.type('.StaticLoggedOutHomePage-cell > .StaticLoggedOutHomePage-login > .LoginForm > .LoginForm-username > .text-input', TWITTER_USER)

    await page.type('.StaticLoggedOutHomePage-cell > .StaticLoggedOutHomePage-login > .LoginForm > .LoginForm-password > .text-input', TWITTER_PWD)
    await page.click('.StaticLoggedOutHomePage-content > .StaticLoggedOutHomePage-cell > .StaticLoggedOutHomePage-login > .LoginForm > .EdgeButton')
    await navigationPromise

    await page.waitForSelector('#timeline')
    await page.screenshot({ path: 'screenshot/sample2.png' })
    await browser.close()
})()

ターミナルで実行
$node sample2.js

前回同様、自動でchromeが立ち上がり、twiiterを検索して、ユーザー名とパスワードを入力してくれます。
スクリーンショット 2019-05-12 23.12.10.png

タイムラインのスクリーンショットを撮ってくれました。
スクリーンショット 2019-05-12 23.13.08.png

感想

勝手に動いている様子を見ていると、なんだかすごいことをしているようで、楽しい。
もっと実用的なのを考えてみたい。進捗があれば追記します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSのEC2にmacからSSHする方法

AWSのEC2へSSH接続したい時があったのでまとめます。

1.キーペアの作成

AWSコンソールのEC2を選択し、キーペアをクリックします。
キーペア画面が開かれるのでキーペアの作成を押すと秘密鍵(pem)がダウンロードされます。

キーペア___EC2_Management_Console.png

2.秘密鍵ファイルの移動と権限設定

ダウンロードしたファイルを~/.ssh以下に移動し、権限変更します

mv /Users/username/Downloads/web_app.pem  ~/.ssh
chmod 600 /Users/username/.ssh/○○.pem

3.terminalからssh接続を行う

amazon linuxのEC2の初期ユーザ名は[ec2-user]です。

ssh -i /Users/username/.ssh/○○.pem ec2-user@ec2のグローバルIP

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
15 package(s) needed for security, out of 22 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-54 ~]$

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxのファイル権限(written by begginer)

ファイル権限が問題で、タスク進まないことがよくあったので、自分でまとめます。

まず、権限の種類には、
「read」「write」「execute」がある。
それぞれが固有の番号を持っていて、

数字 モード 権限
4 r 読み取り
2 w 書き取り
1 x 実行

上のようになっていて、つまり数字だけで表す時はこうなります。

数字 モード 権限
7 rwx 読み取り/書き取り/実行
6 rw- 読み取り/書き取り
5 r-x 読み取り/実行
4 r-- 読み取り
- --x 実行

ファイル権限を見るためのコマンド。

ls -l

すると

drwxr-xr-x   4 user  staff      128 May  5 21:41 vue

左の10文字の文字列を説明します。

1番目の文字はディレクトリかそうでないかを表します。
dならディレクトリ。-ならファイル

2-4番目は「所有者」の権限
5-7番目は「所有グループ」の権限
8-10番目は「その他」の権限

次は権限の変更の仕方です。
次のコマンドで変更できます。

chmod 権限の数字 対象ファイル/ディレクトリ

上のvueディレクトリの権限を変えたい場合は

chmod 764 vue

のようになります。
764が以下を表します
1番目の数字は「所有者」が7の権限を持つ。つまりrwxです。
2番目の数字は「所有グループ」が6の権限を持つ。つまりrw-です。
3番目の数字は「その他」が4の権限を持つ。つまりr--です。

こちらのブログを参考にさせていただきました。
こちらの方が、よりわかりやすいと思います。笑
Linuxの権限確認と変更(chmod)(超初心者向け)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Java/PostgreSQL]WEBアプリをデータベースに接続する

この記事の内容

Eclipseで開発しているWEBアプリとデータベースを接続する方法

この記事を書いた理由

忘れた時に確認するため

この記事を書いた人の特徴

2011年 国立大教育学部卒(当時、プログラミングに全く興味なし)
大学卒業後、伊勢丹・リクルート等で勤務。
2016年頃〜 独学でプログラミングの勉強をスタート
(Railsでアプリを開発できるようになる)
2018年〜 SEとして勤務

RailsではDBの設定はコマンドを入力すれば自動的に処理できた。
Javaでは、その設定を自分でする必要があるのでその勉強を兼ねてこの記事を書いた。

開発環境

PC: Mac
OS: MacOS Mojave
言語: Java
IDE: Eclipse
DB: PostgreSQL
DB管理ツール: pgAdmin

前提条件

接続先のデータベースについて

・接続先のデータベースは、ローカル環境(ポート:5432)である
・sampleデータベースにはcustomerテーブルが存在する
・customerテーブルには下記のサンプルデータが格納されている

SQL
SELECT * FROM customer;
実行結果
  id  |   name   |        email        | password 
------+----------+---------------------+----------
 0001 | sample1  | sample1@sample.com  | password
 0002 | sample2  | sample2@sample.com  | password
 0003 | sample3  | sample3@sample.com  | password
 0004 | sample4  | sample4@sample.com  | password
 0005 | sample5  | sample5@sample.com  | password
 0006 | sample6  | sample6@sample.com  | password
 0007 | sample7  | sample7@sample.com  | password
 0008 | sample8  | sample8@sample.com  | password
 0009 | sample9  | sample9@sample.com  | password
 0010 | sample10 | sample10@sample.com | password
(10 rows)

Eclipseで開発しているWEBアプリについて

・このWEBアプリは、動的WEBプロジェクト(Dynamic WEB Project)として作成
・このWEBアプリは http://localhost:8080/sample/sample2 にアクセスすることを想定する

コード例

Sampleapp2.java
package jp.co.sample;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Sampleapp2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<style>table,th,td,tr{border: 1px solid black};</style>");
        out.println("<body>");
        out.println("<h1>Sampleapp by Java Servlet</h1>");
        out.println("</body>");
        out.println("</html>");

        String url = "jdbc:postgresql://localhost:5432/sample";
        String user = "USERNAME";
        String password = "PASSWORD";

        try{
            Class.forName("org.postgresql.Driver");
            System.out.println("データベースの接続に成功しました");
        } catch(Exception e) {
            e.printStackTrace();
        }


        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            conn.setAutoCommit(false);
            Statement stmt = conn.createStatement();
            String sql = "SELECT * FROM customer";
            ResultSet rset = stmt.executeQuery(sql);

            out.println("<table>");
            out.println("<tr><th>ID</th><th>UserName</th><th>Email</th></tr>");

            while(rset.next()) {
                out.println("<tr><td>" + rset.getString("id") + "</td><td>" + rset.getString("name") + "</td><td>" + rset.getString("email") + "</td></tr>");
            }

            out.println("</table>");

        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }


    }
}

ポイント

WEB-INF/lib ディレクトリに .jarファイル を配置する
スクリーンショット 2019-05-12 16.50.05.png

実行結果

WEBアプリのサーバーを実行し、http://localhost:8080/sample/sample2 にアクセスする

Eclipseのコンソール
5月 12, 2019 4:26:33 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server version name:   Apache Tomcat/9.0.14

(中略)

5月 12, 2019 4:26:35 午後 org.apache.catalina.startup.Catalina start
情報: サーバーの起動 [1,215]ms
データベースの接続に成功しました

ブラウザで画面を確認
スクリーンショット 2019-05-12 16.52.01.png
データベースに格納したデータがブラウザに表示されていることが確認できた。

今後やりたいこと

データの保存・編集・更新・削除
AWS上に置いたDBとの連携

感想

Railsではコマンド数行書いて実行すれば自動的に設定できるDB.
Javaでは一つ一つ自分で設定しなければならないのが面倒。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[ Java + PostgreSQL ] WEBアプリをデータベースに接続する

この記事の内容

Eclipseで開発しているWEBアプリとデータベースを接続する方法

この記事を書いた理由

忘れた時に確認するため

この記事を書いた人の特徴

2011年 国立大教育学部卒(当時、プログラミングに全く興味なし)
大学卒業後、伊勢丹・リクルート等で勤務。
2016年頃〜 独学でプログラミングの勉強をスタート
(Railsでアプリを開発できるようになる)
2018年〜 SEとして勤務

RailsではDBの設定はコマンドを入力すれば自動的に処理できた。
Javaでは、その設定を自分でする必要があるのでその勉強を兼ねてこの記事を書いた。

開発環境

PC: Mac
OS: MacOS Mojave
言語: Java
IDE: Eclipse
DB: PostgreSQL
DB管理ツール: pgAdmin

前提条件

接続先のデータベースについて

・接続先のデータベースは、ローカル環境(ポート:5432)である
・sampleデータベースにはcustomerテーブルが存在する
・customerテーブルには下記のサンプルデータが格納されている

SQL
SELECT * FROM customer;
実行結果
  id  |   name   |        email        | password 
------+----------+---------------------+----------
 0001 | sample1  | sample1@sample.com  | password
 0002 | sample2  | sample2@sample.com  | password
 0003 | sample3  | sample3@sample.com  | password
 0004 | sample4  | sample4@sample.com  | password
 0005 | sample5  | sample5@sample.com  | password
 0006 | sample6  | sample6@sample.com  | password
 0007 | sample7  | sample7@sample.com  | password
 0008 | sample8  | sample8@sample.com  | password
 0009 | sample9  | sample9@sample.com  | password
 0010 | sample10 | sample10@sample.com | password
(10 rows)

Eclipseで開発しているWEBアプリについて

・このWEBアプリは、動的WEBプロジェクト(Dynamic WEB Project)として作成
・このWEBアプリは http://localhost:8080/sample/sample2 にアクセスすることを想定する

コード例

Sampleapp2.java
package jp.co.sample;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Sampleapp2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<style>table,th,td,tr{border: 1px solid black};</style>");
        out.println("<body>");
        out.println("<h1>Sampleapp by Java Servlet</h1>");
        out.println("</body>");
        out.println("</html>");

        String url = "jdbc:postgresql://localhost:5432/sample";
        String user = "USERNAME";
        String password = "PASSWORD";

        try{
            Class.forName("org.postgresql.Driver");
            System.out.println("データベースの接続に成功しました");
        } catch(Exception e) {
            e.printStackTrace();
        }


        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            conn.setAutoCommit(false);
            Statement stmt = conn.createStatement();
            String sql = "SELECT * FROM customer";
            ResultSet rset = stmt.executeQuery(sql);

            out.println("<table>");
            out.println("<tr><th>ID</th><th>UserName</th><th>Email</th></tr>");

            while(rset.next()) {
                out.println("<tr><td>" + rset.getString("id") + "</td><td>" + rset.getString("name") + "</td><td>" + rset.getString("email") + "</td></tr>");
            }

            out.println("</table>");

        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }


    }
}

ポイント

WEB-INF/lib ディレクトリに .jarファイル を配置する
スクリーンショット 2019-05-12 16.50.05.png

実行結果

WEBアプリのサーバーを実行し、http://localhost:8080/sample/sample2 にアクセスする

Eclipseのコンソール
5月 12, 2019 4:26:33 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server version name:   Apache Tomcat/9.0.14

(中略)

5月 12, 2019 4:26:35 午後 org.apache.catalina.startup.Catalina start
情報: サーバーの起動 [1,215]ms
データベースの接続に成功しました

ブラウザで画面を確認
スクリーンショット 2019-05-12 16.52.01.png
データベースに格納したデータがブラウザに表示されていることが確認できた。

今後やりたいこと

データの保存・編集・更新・削除
AWS上に置いたDBとの連携

感想

Railsではコマンド数行書いて実行すれば自動的に設定できるDB.
Javaでは一つ一つ自分で設定しなければならないのが面倒。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Xcodeの設定を複数の端末で共有する

はじめに

MacBookProを買い換えたときや、複数台のMacを利用するときに、端末ごとにXcodeの設定(テンプレートとショートカットキー)をいじるのは面倒だったのでGitHubのプライベートリポジトリで共有するようにした。

1.リポジトリを作ってクローンする

GitHubでプライベートリポジトリを作って任意の場所にクローンする。
ここは別にGitHubじゃなくてDropboxとかでも良いと思う。

2.コピー元の端末の設定フォルダをクローンしたレポジトリにコピペしてプッシュ

/Users/"user_name"/Library/Developer/Xcode配下にある。自分の場合は適当にTemplatesフォルダとUserDataフォルダをコピペした。

3.コピー元の端末の設定ファイルを削除してシンボリックリンクを作る。

/Users/"user_name"/Library/Developer/Xcode配下にあるUserData,Templatesフォルダを削除。
そしてシンボリックリンクを作る。詳しくはこことか

ln -s 'リポジトリにコピーしたフォルダのパス' '/Users/"user_name"/Library/Developer/Xcode'

自分の場合は

ln -s /Users/"user_name"/Git/xcode-setting/UserData /Users/"user_name"/Library/Developer/Xcode/UserData
ln -s /Users/"user_name"/Git/xcode-setting/Templates /Users/"user_name"/Library/Developer/Xcode/Templates

こうするとXcodeがリポジトリのUserDataTemplatesを読み込んでくれるようになる。

4.設定をコピーしたい端末側でリポジトリをpullしてシンボリックリンクを作る

設定ファイルをリモートから取得した後に、3と同様にシンボリックリンクを作る。

これで、とりあえずショートカットキーの設定と、テンプレートを複数の端末で共有ができるようになったはず。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Cyberduckのブックマーク(接続先)をバックアップして復元する

MacのOSをクリーンインストールする際に Cyberduckのブックマーク(接続先)をバックアップし、復元した際の覚書です。

環境

  • macOS Mojave 10.14.3
  • Cyberduck 6.9.3

バックアップするファイルのディレクトリ

/Users/username/Library/Group Containers/xxx.duck/Library/Application Support/duck/BookMarks/

xxx.duckのxxx部分は環境によって異なります

ブックマークをバックアップし、復元する方法

説明するまでもないですが、上記ディレクトリのBookMarksに保存した接続先の設定ファイルが接続先の数だけ保存されています。
OSのクリーンインストール等でアプリを再インストールする際にバックアップしておいたファイルを元のディレクトリに戻してあげる事でブックマークを復元できます。

  1. /Users/username/Libraly/ ディレクトリは不可視ディレクトリになっていますのでcmd + shift + . で不可視ファイルを表示させる

  2. Finder等で/Users/username/Library/Group Containers/xxx.duck/Library/Application Support/duck/BookMarks/の中身をコピーし、ブックマークをバックアップする

  3. ブックマークを復元したい環境でバックアップしておいたBookmarks/の中身を復元先の同じディレクトリに移動する

  4. Cyberduckを起動するとブックマークが復元されます

Bookmarksを編集する際は、Cyberduckは終了しておいた方がいいかもしれません

私はこの方法で復元できましたが、環境によって多少異なる場合がありますのであくまで自己責任でお願いします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

#zsh + #Mac でコンソールに現在入力中の行をクリップボードにコピーする例

つ、ついにできたぞ!

結果としては、ものすごく簡単だった。

~/.zshrc

function peco-history-current-pbcopy() {
  print "$BUFFER" | tr -d "\r\n" | pbcopy
}

zle -N peco-history-current-pbcopy
bindkey '^P^O' peco-history-current-pbcopy


実行

  • コマンド入力中に Control + P O を押す

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1789

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

自分用Macの設定メモ

仕事ではMacbookPro、プライベートではMacbookAirを使用している。

せっかくなので、自分が使いやすいような設定を記録しておく。

端末の初期設定

トラックパッドの設定

  • システム環境設定→トラックパッド

    • image.png
    • image.png
    • image.png
  • システム環境設定→アクセシビリティ→マウスとトラックパッド→トラックパッドオプション

    • 「ドラッグを有効にする」→「3本指のドラッグ」

言語入力

  • Google日本語入力のみを使用する

バッテリ残量に%表示追加

  • バッテリアイコン→「割合を表示」

スクリーンセーバ調整

  • バッテリアイコン→省エネルギー環境設定
    • システム環境設定→デスクトップとスクリーンセーバ→スクリーンセーバ→開始までの時間

メニューバーの時計表示

  • 時計アイコン→日付と時刻環境設定→時計

Dockカスタム

  • システム環境設定→Dock→「Dockを自動的に表示/非表示」
    • Finder以外は削除して、起動しているアプリだけが表示されている状態にする
    • アプリの起動はspotlightを使う

コンピュータ名を非表示

  • システム環境設定→共有→コンピュータ名

ファンクションキーの挙動変更

  • システム環境設定→キーボード→「F1、F2などの~」

デスクトップに表示する項目

  • Finder→環境設定→「デスクトップに表示する項目」

デスクトップアイコンの自動整列

  • Finder→表示→表示順序

アイコンやテキストのサイズ変更・項目情報の表示

  • Finder→表示→表示オプション
    • ディスプレイの解像度設定で一括でフォントサイズ変更ができる

パスバーとタブバーを表示

  • Finder→表示→「パスバーを表示」「タブバーを表示」

ログイン時のアプリ起動設定

  • システム環境設定→ユーザとグループ→ログイン項目

PC再開時のパスワード要求

  • システム環境設定→セキュリティとプライバシー→「スリープとスクリーンセーバー~」

備忘録

個人用Tips

通知センター

ウィジェット追加できる

アクティビティモニタ

PCのリソース状況が見える

DigitalColorMater

カーソルが当たっている個所のRGBがわかる

mac→macの買い替え

移行アシスタントが使える

バッテリ消費の激しいアプリチェック

バッテリアイコンクリック

充電時はケースを外した方がいい

熱がこもる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macを管理する。その① USBを抹殺する(ストレージのみ)

背景

当社では、ほぼ全社員がMacを使っている。
Windowsと違い、Macでは管理する上で必要な色々な事ができない(ハードルがある)
実現までに四苦八苦したので、経緯を書き留めておきます。

目次

  • USBを抹殺する(ストレージのみ) ←今回はコレ
  • FWを強制する
  • Bluetooth共有を抹殺する
  • プリンタを制御する
  • パスワードポリシーを設定する
  • 特定のWebサイトへのアクセスを禁止する

などなど。

やること

Macにストレージを接続できないようにし、データの流出を防ぐ

*今回のお題を実現するには、Macへプロファイルを配布できる環境が必要です。

やってみる

今回色々やりました。

  • 導入しているMDMで設定を試みる(そもそもUSB制御する項目がなかった)
  • Macを直接イジってできないか試みる(できた所で運用回らないから止めた)
  • Mac Serverを導入(結果これでできたが、細かな制御ができなかった)
  • プロファイルを手で書く ←今回はコレ

では、書く。

mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadEnabled</key>
            <true/>
            <key>PayloadDisplayName</key>
            <string>Restrictions</string>
            <key>PayloadIdentifier</key>
            <string>com.apple.systemuiserver</string>
            <key>PayloadType</key>
            <string>com.apple.systemuiserver</string>
            <key>PayloadUUID</key>
            <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>mount-controls</key>
            <dict>
                <key>harddisk-external</key>
                <array>
                    <string>eject</string>
                    <string>alert</string>
                </array>
            </dict>
        </dict>
    </array>
    <key>PayloadDescription</key>
    <string>Mac_Disable storage</string>
    <key>PayloadDisplayName</key>
    <string>Mac_Disable storage</string>
    <key>PayloadIdentifier</key>
    <string>com.apple.systemuiserver</string>
    <key>PayloadOrganization</key>
    <string>COMPANY Name</string>
    <key>PayloadScope</key>
    <string>system</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
    <key>PayloadVersion</key>
    <integer>1</integer>    
    <key>PayloadRemovalDisallowed</key>
    <true/>
</dict>
</plist>

上記プロファイルは、おおよそ3段構成になっている。
上から順に先ず、

ヘッダー(お約束みたいなやつ)

mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

実際に制御をかける箇所

mobileconfig
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadEnabled</key>
            <true/>
            <key>PayloadDisplayName</key>
            <string>Restrictions</string>
            <key>PayloadIdentifier</key>
            <!-- 何の制御をかけたいかを記載。今回は下記。-->
            <string>com.apple.systemuiserver</string> 
            <key>PayloadType</key>
            <!-- 何の制御をかけたいかを記載。今回は下記。-->
            <string>com.apple.systemuiserver</string>
            <key>PayloadUUID</key>
            <!-- 色々プロファイル当てる場合は一意になるUUIDを記載 -->
            <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <!-- ここから下が制御をかける箇所 -->
            <key>mount-controls</key>
            <dict>
                <!-- 外付けストレージ禁止 -->
                <key>harddisk-external</key>
                <array>
                    <string>eject</string>
                    <string>alert</string>
                </array>
            </dict>
        </dict>
    </array>

プロファイル自体の基本設定のような箇所

mobileconfig
    <key>PayloadDescription</key>
    <string>Mac_Disable storage</string>
    <key>PayloadDisplayName</key>
    <string>Mac_Disable storage</string>
    <key>PayloadIdentifier</key>
    <!-- 何の制御をかけたいかを記載。今回は下記。-->
    <string>com.apple.systemuiserver</string>
    <key>PayloadOrganization</key>
    <string>COMPANY Name </string>
    <key>PayloadScope</key>
    <!-- Windowsで言う所のユーザーポリシーかコンピューターか -->
    <string>system</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
    <key>PayloadVersion</key>
    <integer>1</integer>    

あとは、できたプロファイルを配布すれば完了です。

まとめ

調べる過程で、Macでもプロファイル書けば色々制御できる事がわかった。
これは活用できそうだ!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む