Maven依存ライブラリの「ソースコード」を指定ディレクトリに出力する
ほんとーに備忘録。
pom.xmlで指定したライブラリを指定ディレクトリに出力するには下記コマンドを実行すれば良い。
mvn dependency:copy-dependencies -DoutputDirectory=path-to-output
同様にソースコード(を固めたjar)も出力したい!と思ってぐぐってみても、なかなかヒットしない。
最終的にmavenの本家サイトにたどり着く。
Apache Maven Dependency Plugin – dependency:copy-dependencies
mvn dependency:copy-dependencies -Dclassifier=sources -DoutputDirectory=path-to-output
classiferオプションを指定すれば良いみたい。
VagrantとDockerを使ってRedis, Elasticsearch, MySQLをセットアップする
前回に引き続きVagrantネタを。
Redis + Elasticsearchを利用した開発環境をローカルマシンに構築しようと思い、ググっていたところ以下の記事を見つけた。postd.cc
Redis + Elasticsearchでまさに求めていた内容!ということで試してみたが、docker imageのpullが失敗してうまくできない。。ということで、ちょっと修正してみた。
また、元記事ではUbuntuにてVMを起動しDBにPostgreSQLを利用してるが、CentOSで動かしたいのとDBはMySQLを使いたかったので、こちらも合わせて変更した。
ちなみに動作確認マシンはMacBookProです。
事前準備
まずは、Homebrew, VirtualBox, Vagrantは元記事と同様にインストール。
プロキシVMのVagrantfile
プロキシVMのVagrantfile(ファイル名はVagrantfile.proxy)は以下のように修正
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "hfm4/centos-with-docker" config.vm.provision "docker" config.vm.provision "shell", inline: "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill" config.vm.network :forwarded_port, guest: 6379, host: 6379 config.vm.network :forwarded_port, guest: 3306, host: 3306 config.vm.network :forwarded_port, guest: 9200, host: 9200 end
プロキシVM用のイメージはhfm4/centos-with-dockerのCentOS6.5を使用している。このBoxを選んだ理由は、Discover Vagrant Boxes | Atlas by HashiCorpにて
CentOS+dockerのキーワードでヒットしたから。他のBoxでもいいのかも。
なお、Port ForwardingはPostgreSQLの5432をMySQLの3306に変更。
DockerコンテナのVagrantfile
次に、DockerコンテナのVagrantfile(ファイル名はVagrantfile)はコチラ。
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "redis" do |v| v.vm.provider "docker" do |d| d.image = "redis" d.volumes = ["/var/docker/redis:/data"] d.ports = ["6379:6379"] d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end config.vm.define "elasticsearch" do |v| v.vm.provider "docker" do |d| d.image = "elasticsearch" d.ports = ["9200:9200"] d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end config.vm.define "mysql" do |v| v.vm.provider "docker" do |d| d.image = "mysql" d.volumes = ["/var/docker/mysql:/data"] d.ports = ["3306:3306"] d.env = { MYSQL_DATABASE: "test_db", MYSQL_ALLOW_EMPTY_PASSWORD: "yes" } d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end end
元記事からの変更点としては、各コンテナのimageの値を変更。あとはPostgreSQLをMySQLに変更。MySQLの環境変数(MYSQL_DATABASEなど)はここmysql Repository | Docker Hub Registry - Repositories of Docker ImagesのEnvironment Variablesを参考に設定。上記の設定はパスワード未指定でログイン可能にしているので、流用時はよしなに設定を変更してください。
起動&停止
あとは、元記事と同じくvagrantを起動。
$ vagrant up --provider=docker
「vagrant up」だけではプロキシVMが起動しないようなので、providerオプションは必要みたい。
初回実行時はプロキシVMとDockerコンテナのDLに時間がかかるのでしばし待つ。エラーが発生しなければ、下記コマンドで状態を確認できる。
$ vagrant status Current machine states: redis running (docker) elasticsearch running (docker) mysql running (docker)
global-statusを指定するとプロキシVMも確認できる。
$ vagrant global-status id name provider state directory ------------------------------------------------------------------------------------------------ 29d4e38 default virtualbox running /Users/kajitiluna/_Work/vagrant 5c659c2 mysql docker running /Users/kajitiluna/_Work/vagrant 7d841ac redis docker running /Users/kajitiluna/_Work/vagrant 4f5cab0 elasticsearch docker running /Users/kajitiluna/_Work/vagrant
なお、「vagrant halt」で停止するとプロキシVMだけは止まらないので、プロキシVMを止める場合は追加で「vagrant halt <id>」を実行する必要あり。
Vagrant環境でredis3.0を構築
Redis3.0がStableになったとのことで、Vagrant環境にredisを入れてみた。
ちなみに私はvagrantに詳しくないので、どこかから拾ってきたVagrantfileを流用している。
もっといい、ちゃんとしたやり方がありましたら、どなたか教えてください。
Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "centos6.5.3" config.vm.box_url = "https://github.com/2creatives/vagrant-centos/" + "releases/download/v6.5.3/centos65-x86_64-20140116.box" # (途中の設定は中略) config.vm.provision :shell, path: "provision/redis-server.sh" end
ここでは、
config.vm.provision :shell, path: "provision/redis-server.sh"
を追加しただけ。config.vm.provisionにて、redisをインストールするスクリプトを読み込んでいる。
そしてこちらが、メインのスクリプト。
redisをDLした後、/opt/配下でmake実行、ついでにサービス設定も行っている。
provision/redis-server.sh
#!/bin/bash redis="redis-3.0.0" redis_home="/opt/${redis}" if [[ ! -d ${redis_home} ]]; then wget http://download.redis.io/releases/${redis}.tar.gz tar xzvf ${redis}.tar.gz mv ${redis} /opt/ pushd ${redis_home} make mkdir -p /etc/redis mkdir -p /var/log/redis cp -p ${redis_home}/utils/redis_init_script /etc/init.d/redis cp -p ${redis_home}/redis.conf /etc/redis/6379.conf sed -i -e "s/daemonize no/daemonize yes/g" /etc/redis/6379.conf sed -i -e "s/pidfile \/var\/run\/redis.pid/pidfile \/var\/run\/redis_6379.pid/g" /etc/redis/6379.conf sed -i -e "s/logfile \"\"/logfile \/var\/log\/redis\/redis.log/g" /etc/redis/6379.conf sed -i -e "s/dir .\//dir \/var\/log\/redis\//g" /etc/redis/6379.conf sed -i -e "3i # chkconfig: - 85 15" /etc/init.d/redis sed -i -e "4i # description: redis-server" /etc/init.d/redis sed -i -e "5i # processname: redis" /etc/init.d/redis ln -s ${redis_home}/src/redis-server /usr/local/bin/redis-server ln -s ${redis_home}/src/redis-cli /usr/local/bin/redis-cli /etc/init.d/redis start chkconfig --add redis chkconfig redis on popd fi
redis3.0のrpmが見つからなかったので、redisの公式サイトからtar.gzをダウンロードする。
wget http://download.redis.io/releases/${redis}.tar.gz
${redis}は適宜インストールしたいバージョンに書き換えてください。
そして/opt配下にインストール。
tar xzvf ${redis}.tar.gz mv ${redis} /opt/ pushd ${redis_home} make
ホントはmake testすべきなんだけど、tclを入れる必要があったり、ちょっと手間だったので飛ばした。
redisのインストール自体はここまで。とってもカンタン。
以降はredisをサービス起動するための設定。ここからが一手間。
vagrantにログインして直接設定すれば苦労しないけど、そしたらvagrant使っている意味ないからね。
ちなみにここからの設定はhttp://blog.livedoor.jp/tattyamm/archives/4147335.htmlを参考にしました。
mkdir -p /etc/redis mkdir -p /var/log/redis cp -p ${redis_home}/utils/redis_init_script /etc/init.d/redis cp -p ${redis_home}/redis.conf /etc/redis/6379.conf
まずは、必要なディレクトリを作成して、サービス起動用のスクリプトと設定ファイルをコピー。
sed -i -e "s/daemonize no/daemonize yes/g" /etc/redis/6379.conf sed -i -e "s/pidfile \/var\/run\/redis.pid/pidfile \/var\/run\/redis_6379.pid/g" /etc/redis/6379.conf sed -i -e "s/logfile \"\"/logfile \/var\/log\/redis\/redis.log/g" /etc/redis/6379.conf sed -i -e "s/dir .\//dir \/var\/log\/redis\//g" /etc/redis/6379.conf
設定ファイルを気合で書き換え。書き換え後の設定は以下のようになります。
daemonize yes # デーモン化の設定を有効化 pidfile /var/run/redis_6379.pid # pidファイル名を変更 logfile /var/log/redis/redis.log # 出力先を標準出力からファイルに変更 dir /var/log/redis/ # dumpファイルを出力するディレクトリを変更
次に起動スクリプトを書き換え。
sed -i -e "3i # chkconfig: - 85 15" /etc/init.d/redis sed -i -e "4i # description: redis-server" /etc/init.d/redis sed -i -e "5i # processname: redis" /etc/init.d/redis ln -s ${redis_home}/src/redis-server /usr/local/bin/redis-server ln -s ${redis_home}/src/redis-cli /usr/local/bin/redis-cli
chkconfigに必要な設定を追加しているのと、あとは起動スクリプト内に記載されているパスにシンボリックリンクを追加。
ここまでで、vagrant upしてログインすると、既にredis-serverが起動している状態になっていた。
ホントはredis-clusterを構築したいなぁと思いつつ、今日はここまで。
テキストファイルを指定文字数ごとに読み込む
ぐぐってもすぐにはヒットしなかったので、備忘録的にメモる。
テキストファイルを1行ごとに読み込むのはBufferedReader#readLine()が有名。
今回やりたいのは、指定文字数ごと、たとえば100文字ごとにファイルを読み込むこと。
Reader#read()が1文字だけ読み込むので、
これを100回ループさせればいいのだが、性能悪そう。
ということで、標準APIを調べてみたら、Reader#read(char[])が見つかった。
引数のcharの配列長を100にすれば100文字ごとに読み込むみたい。
試しに1GBのテキスト1ファイルを
read()とread(char[])でそれぞれ読み込んだら、
前者が70秒近くかかったが、後者は5秒程度で済んだ。
確かにread()は性能わるぽとOracleのページにも紹介されていたので、
read(char[])を使う方がよさそう。
ちなみに動作確認で実装したコードはGitHubに公開済み。
さすがに1GBのテキストは上げてないが。
https://github.com/kajitiluna/ReadTextSample
CountDownLatchを改造して、別スレッドの複数並列処理の結果に応じて処理する
Javaのconcurrentパッケージには同期処理を行うための便利な機能が用意されている。
今回注目したのはCountDownLatch.
CountDownLatchを使うと、他の複数スレッドの処理の完了を待ってからメインのスレッドで処理を継続できる。
こんなカンジで。
public void execute() { CountDownLatch latch = new CountDownLatch(3); Runnable otherThreadTask1 = this.doTask(task1, latch); Runnable otherThreadTask2 = this.doTask(task2, latch); Runnable otherThreadTask3 = this.doTask(task3, latch); // 別スレッドでの処理を登録 ExecutorService service = Executors.newFixedThreadPool(3); service.submit(otherThreadTask1); service.submit(otherThreadTask2); service.submit(otherThreadTask3); try { // task1〜3の処理が完了するまで待つ latch.await(); // 以降の処理を行う doSomething(); } catch (InterruptedException iEx) { // 中断処理 } } // 別スレッドで行うタスクを生成する。 public Runnable doTask(Runnable runnable, CountDownLatch latch) { final Runnable mainTask = runnable; final CountDownLatch targetLatch = latch; Runnable task = new Runnable() { public void run() { mainTask.run(); // 処理完了を通知 targetLatch.countDown(); } }; return task; }
CountDownLatchそのもの使い方について触れたい訳ではないので、
この辺の話はこちらにお任せして。
単純に複数スレッドの処理完了を待つのであればこれで問題ないが、実際にはもうちょっと複雑な状況が発生する。
- 別スレッドの処理のうち、どれか1つが完了すれば、await()の待ち処理を解除したい
- でも、別スレッドの処理が全て異常終了することもあるから、このときは全て異常終了するのを待ちたい
こういった状況では、単にCountDownLatchを使用するのでは対応できない。
他スレッドの異常終了を検知するための同期機構が必要になる。
また、正常終了/異常終了の結果をもとに何かしら処理することになるので、
await()を呼び出したスレッドで、これらの結果を取得する同期機構も必要になったり。。
もう少し、具体的にすると、以下のような状況になる。
レプリケートしている複数のサーバに同時に接続して、どこかのサーバに接続成功したら、その接続先に対して処理を行う。全てのサーバに接続できなかった場合は数回リトライして、だめなら処理中断。
並列処理にせずに順番にサーバに接続を試みると、タイムアウトで時間がかかるし、しかも接続先が多くなるので、異常時はそのタイムアウトがサーバ台数発生する、そんなの運用にたえられないよ。
どうせ、どこかは活きているはずだから、そこにすぐ繋げるようにしてよ。。
といった、ちょっと面倒くさい要望。
要は、CountDownLatchのawait()実行後、正常/異常で処理を分岐させたい。
正常処理は1つのcountDown()でawait()ロックを解放させたいが、
異常処理は3つのcountDown()でawait()ロックを解放させたい。
そして、ロック解放後は、正常/異常をCountDownLatchが保持しているはずだから、
そこから正常/異常を判断したい。
標準APIを調べてみても、このようなことができるクラスが見つからなかった(あるいは単なる知識不足か)ので、CountDownLatchで上手いことすれば出来るか確認するために、実装を覗いてみた。
詳細は省略するが、CountDownLatchの同期機構は内部で利用しているAbstractQueuedSynchronizerが担っている。
そしてAbstractQueuedSynchronizerは、保持しているstateパラメータで同期をとっている。
このstateパラメータはint型で、外部から利用できるのはこのパラメータ1つのみ。
なお、具体的な同期メカニズムはjava内部に隠ぺいされていた。
つまり、CountDownLatchの同期機構は1パラメータでロック取得/解放をしている。
ここで目的としている、正常/異常といった複数パラメータの管理はできないことがわかった。
ということで、こういった処理ができるクラスConditionLatchを作ってみた。
方針としては、AbstractQueuedSynchronizerの同期機構を利用して、
1つのstateパラメータで複数の状態を無理やり管理させる。
どうせ、int型の最大値からcountDownさせることは殆どないのだから、その余りそうな箇所を有効活用してみた。
ConditionLatchのコードはGitHubに公開したので、詳細はそちらをみてもらいたい。
https://github.com/kajitiluna/ConditionLatch
このクラスを使用することで、上記の状況は以下のような実装で対応できる。
public void execute() { // 正常処理のcountを1で、異常処理のcountを3でlatchを作成 ConditionLatch<SomeConnection, SomeException> latch = new ConditionLatch<>(1, 3); Runnable task1 = this.connectTask(server1, latch); Runnable task2 = this.connectTask(server2, latch); Runnable task3 = this.connectTask(server3, latch); // 別スレッドでの処理を登録 ExecutorService service = Executors.newFixedThreadPool(3); service.submit(task1); service.submit(task2); service.submit(task3); try { List<SomeConnection> resultList = latch.await(); SomeConnection connection = resultList.get(0); // 接続情報をもとに以降の処理を行う doSomething(connection); } catch (SubmittedFailureResultException sfEx) { // 処理失敗時の処理 } catch (InterruptedException iEx) { // Interrupt時の処理 } } public Runnable connectTask(Server server, ConditionLatch<?, ?> latch) { final Server targetServer = server; final ConditionLatch<?, ?> targetLatch = latch; Runnable task = new Runnable() { @Override public void run() { try { SomeConnection connection = connectServer(targetServer); // 接続できたときに接続情報をlatchに渡す targetLatch.submit(connection); // submit()で正常処理をcountDown } catch (SomeException ex) { // 接続に失敗したとき targetLatch.submitForFail(ex); // submitForFail()で異常処理をcountDown } } }; return task; }
これで、正常/異常で処理を分けるCountDownLatchを簡単に実装できる。
ちなみに、今回は同期パラメータがintであるAbstractQueuedSynchronizerを使用したが、
実装は同じでパラメータ型をlongに変えただけのAbstractQueuedLongSynchronizerというのもある。
広い範囲が必要なら、こちらのクラスを使用するほうがいいかも。
まずはコーディング規約を学ぶ
こんにちは。kajitilunaです。
「新人/若手向け、これだけは知っとけTips25 Advent Calendar 2012」
の14日目の小ネタを。
チームでのシステム開発に関わると、
コーディング規約について聞いたことや、
あるいはいやいや従わされたことがあると思います。
または、ある程度しっかりしたチームや組織だったら、
研修などで叩き込まれることと思います。
今回は、
システムのちょっとしたツールを作って、とか言われて、
それをシステムのメインとは別の言語で作るんだけど、
自分その言語に詳しくないぞ、、、といったケースを考えます。
前提
- インデントを揃えて見やすくする。
- その処理を端的に言い表す単語を用いる。
- 名詞、動詞、形容詞を使い分ける。
- ローマ字表記な名前付けを避ける。
、、、など、後々見る人にとって分かり易いものを心がける気持ちが必要です。
要は他人への思いやり、いや、むしろ明日の自分への思いやりです。
それがないとコーディング規約を守る、というレールに乗らないので。
チーム、組織にその言語のコーディング規約が存在しないか確認
ええ。いわずもがなでございます。
そして大半の場合、チームの誰も知らないのが世の常でございます。
ググる
言語名と「コーディング規約」という単語合わせでググってみましょう。
チームが頼りにならないのならグーグル先生に頼りましょう。
チームの規約がないのであれば、世間一般的なしきたりに従ってください。
JavaやC++, C#などはエンタープライズ開発で頻繁に扱われるので、たくさんヒットします。
JavaScriptやVBScriptなどは言語のクセが強いので、特有のルールがあります。
これらに従えば、たいてい失敗はしません。
規約の遵守率=プログラムの品質
経験上、こう言っちゃってもいいくらいです。
一般的な規約に従っていないコードは、
その言語に疎い人が作った可能性が高く、不具合も多い傾向にあります。
少なくても、規約を守っていないけど設計がちゃんとしている、ようなコードには
一度も出会ったことはありません。
そもそも、コーディング規約そのものが不具合を回避するための指針なので。
ちなみに私自身、そういったコードに出会ったときは、
品質を疑って中身をチェックするようにしています。
逆に、言語にあまり慣れていなくても、
その言語の規約に従えば、その言語の扱い方が(なんとなくですが)身に付きます。
ということで
初めて扱う言語は、文法と一緒に規約を学んでみましょう。
作業効率化の時短ショートカットを厳選紹介
みなさん、こんにちは。kajitilunaです。
久々の投稿は「新人/若手向け、これだけは知っとけTips25 Advent Calendar 2012」の3日目を書きます。
ちなみに2日目はTsukanoさんの「新人向け、Eclipse便利機能(入門)」でした。
先日、友人(非IT系企業に就職)との会話の中で、ショートカットキーの話題があがりました。
話を聞くと、
「Ctrl+c(コピー)」と「Ctrl+v(ペースト)」は使っているけど、
それ以外は知らないとのこと。
ファイルの保存は、
メニューのファイルからか、保存アイコンを選択している、とのことで、
保存面倒くさい。億劫になってると、
PCの電源が突然落ちて数時間の作業をやり直したことあるとか。。。
ショートカットがあるんだから、それくらい使えよ!
と言っても、こういう地味な操作って、先輩が親切に教えてくれなければ意外と知らないもの。
ということで、新人向け、というか
IT業界に限らず、PC慣れてないけどこれから頻繁に使うよって人向けに、
作業の効率化Windowsショートカットを厳選して紹介します。
ちなみに、Windowsのショートカットの情報はググると色々とヒットします。
とは言っても、ショートカットの一覧がいーっぱい載っていて、
どれから覚えたらいいのやら、、、と初心者は戸惑いがちなので、
ここでは、みんなが使えて作業の効率化につながるものに絞ります。
Macのショートカットは?だって!?
仕事ではWindowsしか使わないからねぇ。どうしても知りたければググりな!
万能編
まずは、みんな知っていて当たり前なものたち。
ココに知らないものがあれば、作業効率化のために今すぐ覚えた方がいいですよレベルを集めてみました。
メモ帳やワード、エクセル、エクスプローラなど、ほぼ全てのアプリで通用するショートカットです。
ショートカットキー | 処理 |
---|---|
Ctrl + c | 選択したところをコピーするだけ。キーの「c」はCopyの頭から。 |
Ctrl + v | コピーしたモノを張り付ける。キーの「v」の由来は、、、ググってみな! |
Ctrl + s | 保存する。保存しなかったばっかりに数時間の作業をやり直さないように、頻繁にこれで保存するんだ! ちなみに、自分はこの文章を1文入力するたびに保存しています。 |
Ctrl + z | やり直し。ギョーカイ用語的にはアンドゥという。直前の操作を取り消すことができる。 |
Ctrl + f | 検索。あの文字列どこにあったけ〜という時にコレで探す。 |
エクスプローラ編
意外と知られていないのが、エクスプローラのショートカット。
ちなみに自分は3年目くらいの頃に知りました。
ショートカットキー | 処理 |
---|---|
Alt + ← | 前のフォルダに戻る |
Alt + → | 次のフォルダに進む |
Alt + ↑ | 一つ上の階層のフォルダに移動する(WindowsXPは対象外) |
そう、これらはエクスプローラの左上の方にあるアイコンと同じ動きです。
キーも矢印の方向が直観とあっているので、すぐに覚えられるはず。
これを覚えちゃうと、マウスいらずになります。
マウスをずっと動かしていると腕がこるので、これらは非常に便利です。
あと、意外と地味なものとして、、
ショートカットキー | 処理 |
---|---|
(ファイル、フォルダ選択時に)Alt + Enter | プロパティ画面を開く |
頻繁にプロパティ画面を開いている人にはうってつけ!
タブ編 ただしInternetExploler除く
エクスプローラのプロパティ画面のタブや、エクセルのシートもショートカットで簡単に移動できます。
これら以外にもタブを備えているものは、同じショートカットが効くことが多いです。
しかし、なぜかInternetExploler(以後IEと記載)のタブには効かず。。。
ショートカットキー | 処理 |
---|---|
Ctrl + PageDown | 右側のタブに移動する |
Ctrl + PageUp | 左側のタブに移動する |
Downが次だから右側、Upが前だから意味で左側、と結びつけると覚えやすいはず。
これを覚えると、エクセルの作業が楽しくなりますぜ。
IEのタブ編
IEは8からタブブラウザになりました。上記のタブ編のついでに紹介します。
ショートカットキー | 処理 |
---|---|
Ctrl + Tab | 右側のタブに移動する |
Ctrl + Shilf + Tab | 左側のタブに移動する |
ちょうどWindowsのアプリをAlt + TabとAlt + Shift + Tabで切り替えられるのと似ています。
以下はおまけ。
ショートカットキー | 処理 |
---|---|
Ctrl + Q | サムネイルの表示(IE8のみ。IE9では削除されている) |
ランチャー編
フリーのソフトを入れれば、自由にカスタマイズできますが、
ここでは、Windowsのデフォルトで簡単に使用できるものを紹介します。
ランチャーとは?
それは簡単な文字列を入力することで、アプリケーションを起動できる。
Windowsキー+R で「ファイル名を指定して実行」というダイアログが開きます。
ここに以下の文字列を入力してEnterすると様々なアプリを起動できます。
入力する文字列 | 処理 |
---|---|
notepad | メモ帳を開く。他のエディタを使用している場合はあまり利用価値はないが、ちょっとした一時メモを書くときにでも。 |
calc | 電卓を開く。ちょっとした計算をしたいときに意外と便利 |
cmd | コマンドプロンプトを開く。ITギョーカイ人には必須。そうじゃない人はきっと一生お目にかからない |
mspaint | ペイントを開く。ドット絵を描くときに重宝する |
仕事柄、画面イメージを描くときにちょっとした修正でmspaintを活用するのですが、
同僚からは誰もそんなコマンド知らん、と言われましたw
ちなみに、MSオフィスもランチャーから起動できますよ。
ここまでくると、覚えても利用する機会が多いかはビミョーですが。
入力する文字列 | 処理 |
---|---|
excel | 名前の通り、エクセルを起動する |
powerpnt | パワーポイントを起動する。ちなみに「pnt」はギョーカイ的な「point」の略語。 |
winword | ワードを起動する。 |
最後に
さて、ここまで、作業効率化のためのショートカットを紹介しました。
もし知らないものがあったら、是非活用してください。
ちなみに一部のショートカットについては、
説明を簡略化するために、あえて紹介していないものもあります。
(たとえば、万能編で「Ctrl+x」や「Ctrl+a」、「Ctrl+Alt+Del」など)
これらは、ここで紹介したショートカットに慣れたら調べて使ってみてください。
いずれにしても、ショートカットの目的は作業を効率化するためのもの。
普段の作業で困っていない操作のショートカットキーは覚えられないと思います。
日々の操作で面倒くさいなぁ、、、って思うことがあれば、
その時にショートカットキーが存在するかググってみてください。
「面倒くさいと思う作業を楽にしよう」と思うことが効率化の第一歩です。
それでは。