Amarronの日記

iOSやMac、Web系の記事を書きます。

App Store の iOSアプリ を 公開停止 する 方法 

AppStore の アプリ を 公開停止 する 方法 

概要

AppStoreに公開中のiOSアプリを取り下げる方法の説明です。
(申請(公開前のレビュー依頼)を取り下げたい場合、Developer Rejectで対応してください)
アプリの公開地域を全て解除することでAppStoreで公開されなくなります。

手順

  1. iTunes Connectへログイン
  2. Manage Your Appsを選択
  3. 公開停止したいアプリを選択
  4. 「Rights and Pricing」を押下
  5. Appの使用可能日・価格帯・地域の設定画面が表示されるので公開地域を解除します
    1. 「特定の地域」リンクを押下(公開中の地域が表示される)
    2. 「すべての選択を解除」ボタンを押下(全ての地域のチェックが外れる)
    3. 「Save」ボタン押下
  6. Statusが「Ready for Sale」から「Developer Removed From Sale」となり、App Infomationに「Delete App」ボタンが表示されます。(「Delete App」を選択しなくてもAppStoreからの公開は停止されました。)

f:id:Amarron:20140731170541p:plain

f:id:Amarron:20140731170550p:plain

f:id:Amarron:20140731170557p:plain

その他

  • 私の場合、公開停止の手続きをしてから30分くらいでAppStoreから公開されなくなりました。
  • AppStoreに一度も公開されなかったアプリは、公開地域を全解除しても「Delete App」が表示されません。(間違って作ってしまった場合、アプリを消したいけど消せなくて結構辛いです。。。)

Mac で よく使う キーボードショートカット まとめ

f:id:Amarron:20110722135432j:plain

MacOS X)で個人的によく使うキーボードショートカット(コマンド)を用途別にまとめてみました。

参考URL: OS X のキーボードショートカット

ターミナル

ターミナルでの操作

ショートカットキー 説明 詳細
control + A 行頭に移動 現在の行/段落の先頭に移動
control + E 行末に移動 現在の行/段落の末尾に移動
option + 右矢印キー 単語の末尾に移動 テキスト挿入ポイントを次の単語の末尾に移動
option + 左矢印キー 単語の先頭に移動 テキスト挿入ポイントを前の単語の先頭に移動
control + W 単語先頭まで削除 テキスト挿入ポイントから前の単語の先頭まで削除
control + D 1文字削除、ログアウト カーソル文字を1文字削除、ログアウト
control + K 右側全て削除 カーソルの右側の文字から行/段落の末尾までを削除
control + U 左側全て削除 カーソルの左側の文字から行/段落の先頭までを削除
control + L 再表示 画面をクリアしてカレント行を再表示する
tab 予測補完 コマンドやディレクトリ名を補完する
control + C 処理中断 実行中の処理を中断する
control + S 出力停止 画面への出力を中断する
control + Q 出力再開 画面への出力を再開する
control + Z 処理一時停止 実行中の処理を一時停止する

テキスト編集

テキストエディタで文章編集時の操作(viやemacsではない)

ショートカットキー 説明 詳細
command + A 全選択 前面に表示されている Finder ウインドウ (ウインドウが開かれていない場合はデスクトップ) のすべての項目を選択
command + C コピー 選択した項目/テキストをクリップボードにコピー
command + V ペースト クリップボードの内容をペースト
command + X 切り取り 選択した項目/テキストをクリップボードにコピーしテキストは削除
command + Z 動作を戻す 取り消す/やり直す
command + Y 動作を進める command + Zと反対の動作
command + S 保存 ドキュメントを保存
command + F 検索 検索ウインドウを開く
command + 上矢印キー 先頭に移動 テキスト挿入ポイントを現在のドキュメントの先頭に移動
command + 下矢印キー 末尾に移動 テキスト挿入ポイントを現在のドキュメントの末尾に移動
command + 左矢印キー 行頭に移動 テキスト挿入ポイントを現在のドキュメントの行頭に移動
command + 右矢印キー 行末に移動 テキスト挿入ポイントを現在のドキュメントの行末に移動
option + エリア選択 範囲指定エリア選択 optionを押しながらトラックパッドで範囲指定出来る(行間にまたがって空白を削除したい時に便利)

アプリケーション

常によく使う操作

ショートカットキー 説明 詳細
command + tab アプリ切替え 開いているアプリケーションのリスト (最近使った順番に表示されている) 内を順方向に移動
command + N 新規立上げ 最前面のアプリケーションで新規作成
command + W 閉じる 最前面のウインドウを閉じる
command + Q 終了 最前面のアプリケーションを終了
command + D 保存しないで閉じる 「開く」ダイアログと「保存」ダイアログで「デスクトップ」フォルダを選択・または、Mac OS X v10.6.8 以前で「保存しない」ボタンを含むダイアログから「保存しない」を選択
電源ボタン スリープ 電源が入ったら、タップしてスリープ解除/スリープ状態

Alfred

f:id:Amarron:20140705231226j:plain

Alfredとは、Macで利用できるランチャーアプリです。(App Storeでダウンロードできます)
もっとキーボードだけで操作したい人向けです。
個人的には、標準のショートカットにシャットダウンがないのでAlfredで「S」で検索しシャットダウンしています。(電源ボタン長押しで強制終了は出来るのですが、強制終了は気が引けるので)
その他にもアプリケーションを起動する時に良く利用します。一度使うと手放せなくなると思います。

iPhoneアプリ を iPadアプリ に 対応させる 方法

iPhoeアプリをiPadアプリとしてもAppStoreに配布する方法について書いてあります。 iPad対応するには、Xcodeで「ユニバーサルに変更」するのと「iPad用画像の設定」が必要となります。

環境

Xcode 5.1.1

流れ

  1. ユニバーサル化
  2. プログラム修正(修正が必要な場合のみ)
  3. 申請手続き

1. ユニバーサル化

DeviceをiPhoneからユニバーサルに変更する事でiPadに対応されます。

iPadのTAGETSを作ることで、TAGETS別にプログラムを変更出来るようになります。(「2. プログラム修正」で利用する場合があります)
ユニバーサルにすることによって、既存のiPhone用のxibがそのままiPadでも使えます。
また、iPadでアプリ起動時にiPhoneアプリとして起動するのではなく、iPad用アプリとして起動します。

  1. 「TARGETS->MyApp」を右クリックで「Depulicate」を選択
  2. 表示されたダイアログで「Duplicate and Transition to iPad」を選択(TARGETSにMyApp-iPadが追加されます)
  3. 1で選択した「「TARGETS->MyApp」の「General->Deployment Info->Devices」を「iPhone」から「Universal」に変更(この対応だけで(Depulicateで追加しなくても)iPadに対応します
  4. iPadで確認(実機の場合、右下に倍率を変更するボタンが表示されなければiPad用で開かれています)

f:id:Amarron:20140615124252p:plain

2. プログラム修正(修正が必要な場合のみ)

iPad用のアプリアイコン画像や起動時画像の追加、iPad用に細かいプログラム修正を行います。

  1. アプリアイコンの追加
    • 「TARGETS->MyApp->General->App Icons」でアプリアイコン画像(76x76,152x152)を設定
    • 「TARGETS->MyApp-iPad->General->App Icons」でアプリアイコン画像(72x72,144x144)を設定
  2. 起動画像の追加
    • 「TARGETS->MyApp->General->Launch Images」で起動画像画像(768X1024,1536X2048,1024X768,2048X1536)を設定
  3. プログラム修正(iPadで確認した時にレイアウト部分が崩れている場合は修正しましょう)
    • iOSアプリケーション プログラミングガイドによると「iPhone用とiPad用で、別々にビューコントローラのクラスを定義する」ことをお勧めしています。(別々に作った場合、Target Membershipにチェックを外すことでiPhoneiPadを切り替えることが出来ます)
    • 私は、新たにクラスを定義する程複雑なアプリではなかったので、同じクラスをif文で修正しました。(if([[UIDevice currentDevice].model isEqualToString:@"iPad"]){// iPadの調整})

f:id:Amarron:20140615124310p:plain

3. 申請手続き

  1. iTunes Connetで「Add Version」でバージョンアップ用アプリの追加手続きを行います。(iPhoneアプリと同じ手順)
  2. Xcodeでアーカイブ化しアプリをアップします。(iPhoneアプリと同じ手順)
  3. iTunes Connetでステータスが「Upload Received」に変更されると、iPad用のスクリーンショットを追加出来るようになるのでiPad用の画像(1536x2048 or 1536x2008)を設定しましょう。(iPadアプリで新しい手順)

※.1と2についてはわからない場合、App Store に iOSアプリ を 公開する方法の「3. 配布したいアプリの設定」を参照してください。

参考URL

iOS の アプリ内課金(In-App Purchase) 組込方法

概要

iPhone」や「iPad」でのアプリ内課金(In-App Purchase)の実装方法について書きました。
iOSアプリ内で特定の機能を有料販売するための準備・開発・テストの説明中心です。
全体的な作業時間としては、1日は覚悟したほうが良さそうです。
(課金のタイプによってはサーバー側の開発がないから、APNsよりは少し楽かも??)

開発環境

OS : OS X 10.9.2
Xcode : 5.1.1

前提条件

プロダクト(次の2つ)が作成されていること。

  • iOS Developer Centerでアプリの登録(Identifiersの登録時に「In-App Purchase」にチェックする(デフォでチェック入ってる))
  • iTunes Connectでアプリを作成(ステータスをPrepare for Uploadまで進める)

作成方法はこちら(アプリの登録(1.証明書関連の作成)、アプリを作成(3. 配布したいアプリの設定))

アプリ内課金の種類

全部で5種類。
消費型はゲームの課金でよく使われます。購読型は電子書籍でよく使われます。
今回は、「非消耗型(Non-consumable)プロダクト」で作成します。

名称 説明 備考
消耗型(Consumable)プロダクト アプリケーションの実行に伴って消費されていく項目です。Voice over IPアプリケーションで通信できる残り分数や、音声の転送など一度限りのサービスが例として挙げられます。 消費アイテム
非消耗型(Non-consumable)プロダクト ユーザのすべてのデバイス上で無制限に使用できる項目です。ユーザのすべてのデバイスで使用可能になります。例としては、書籍やゲームレベルなどのコンテンツ、およびアプリケーションの追加機能などがあります。 無制限アイテム
自動更新購読(Auto-renewable subscriptions) エピソードで構成されるコンテンツです。消耗型プロダクトと同様に、自動更新購読は、ユーザのすべてのデバイスで無制限に利用可能になります。非消耗型プロダクトと異なるのは、自動更新購読には期限があるという点です。新しいコンテンツは定期的に信され、ユーザは購読が有効な期間中、発行されたコンテンツに対してアクセスできます。自動更新購読の期限が近づいてくると、ユーザに代わってシステムにより購読が自動的に更新されます。 期間で自動課金
非更新購読(Non-renewable subscriptions) エピソードで構成されるコンテンツを含まない購読です。たとえば、歴史的な写真のデータベースに対するアクセス権や、フライトマップのコレクションなどがあります。ユーザのすべてのデバイスで購読を使用可能にし、ユーザの購入を復元するは、アプリケーション側で対応することになります。このプロダクトタイプは、ユーザのアカウントが既にサーバ上に存在し、このアカウントを使用してコンテンツの復元時にユーザを識別できる場合によく使用されます。購読の期限と期間もアプリケーション(またはサーバ)で実装し、実行することになります。 期間で課金(開発者が期間や期限をサーバーで管理)
無料購読(Free subscriptions) Newsstandに無料購読のコンテンツを置くための手段です。サインアップしたユーザは、Apple IDに関連付けられたどのデバイスからでも購読できます。期限切れになることはありません。また、購読にはNewsstand対応アプリケーションが必要です。 無料、Newsstand対応アプリケーション

流れ

  1. 準備
    1-1. iTunes ConnectでManage In-App Purchasesの追加
    1-2. StoreKitフレームワーク追加
    1-3. In-App PurchaseをON
  2. 開発
    2-1. チェック処理
    2-2. 購入開始処理
    2-3. トランザクション処理・リストア処理
    2-4. 購入終了処理
  3. テスト

1. 準備

iTunes Connectの設定やプロジェクトにフレームワークや設定の変更を行います。

1-1. iTunes ConnectでManage In-App Purchasesの追加

iTunes Connectに接続し対象のアプリを開き、アプリ内課金のアイテム情報(Manage In-App Purchases)を登録します。(登録内容は「2. 開発」で利用します。)
「Type」は、今回は「Non-consumable」を選択します。

f:id:Amarron:20140523212449p:plain

「Reference Name」は、アイテムの表示名を設定します。(Appleから毎月送信される売上レポートで表示名)
「Product ID」は、一意のグローバル識別子でドメイン名のスタイルを逆にして使用することを推奨しています(例: com.companyname.application.productid)。
「Screenshot」は、購入確認画面のスクリーンショットをアップロードします。(3. テスト実施時にスクリーンショットをキャプチャしアップロードしましょう。)

f:id:Amarron:20140523212507p:plain

1-2. StoreKitフレームワーク追加

ライブラリに「StoreKit.framework」を追加します。
(TAGETS > Build Phases > Link Binary With Libraries)

1-3. In-App PurchaseをON

CapabilitiesのIn-App PurchaseをOFFからONに変更します。 (PROJECT > Capabilities > In-App Purchase)

f:id:Amarron:20140523212521p:plain

2. 開発

アプリ内課金のプログラム。
参考URL:失敗しない iOS In-App Purchase プログラミング
サンプルコード:SampleInAppPurchaseswift

2-1. チェック処理

課金イベントにアプリ内課金が使えるかチェックをします。

MyClass.h

 #import <StoreKit/StoreKit.h>

// delegateにSKProductsRequestDelegateとSKPaymentTransactionObserverを追加
@interface MyClass : UIViewController <SKProductsRequestDelegate, 
                                            SKPaymentTransactionObserver> {
}

MyClass.m

// メソッド名は適当に
- (BOOL)_checkInAppPurchase
{
    if (![SKPaymentQueue canMakePayments]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー"
                                                        message:@"アプリ内課金が制限されています。"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
        return NO;
    }
    return YES;
}

2-2. 購入開始処理

アイテム情報の取得と購入開始の処理を行います。

MyClass.m

// メソッド名は適当に(チェック処理の結果がYESだったらこの処理を呼ぶ)
- (void)_startInAppPurchase
{
    // com.companyname.application.productidは、「1-1. iTunes ConnectでManage In-App Purchasesの追加」で作成したProduct IDを設定します。
    NSSet *set = [NSSet setWithObjects:@"com.companyname.application.productid", nil];
    SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
    productsRequest.delegate = self;
    [productsRequest start];
}

 #pragma mark SKProductsRequestDelegate
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
  // 無効なアイテムがないかチェック
  if ([response.invalidProductIdentifiers count] > 0) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー"
                                                        message:@"アイテムIDが不正です。"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil, nil];
    [alert show];
    return;
  }
  // 購入処理開始(「iTunes Storeにサインイン」ポップアップが表示)
  [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
  for (SKProduct *product in response.products) {
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
  }
}

2-3. トランザクション処理・リストア処理

App Storeトランザクションを処理するのを待機し、購入が成功した場合アイテム購入の処理を行います。

MyClass.m

// トランザクション処理
#pragma mark SKPaymentTransactionObserver
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                // NSLog(@"購入処理中");
                // TODO: インジケータなど回して頑張ってる感を出す。
                break;
            case SKPaymentTransactionStatePurchased:
                // NSLog(@"購入成功");
                // TODO: アイテム購入した処理(アップグレード版の機能制限解除処理等)
                // TODO: 購入の持続的な記録
                [queue finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                // NSLog(@"購入失敗: %@, %@", transaction.transactionIdentifier, transaction.error);
                // TODO: 失敗のアラート表示等
                break;
            case SKPaymentTransactionStateRestored:
                // リストア処理
                // NSLog(@"以前に購入した機能を復元");
                [queue finishTransaction:transaction];
                // TODO: アイテム購入した処理(アップグレード版の機能制限解除処理等)
                break;
            default:
                [queue finishTransaction:transaction];
                break;
        }
    }
}

// リストア処理結果
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
    // NSLog(@"リストア失敗:%@", error);
    // TODO: 失敗のアラート表示等
}

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    // NSLog(@"全てのリストア完了");
    // TODO: 完了のアラート表示等
}

購入の持続的な記録には次の方法があります。(消費型プロダクトは維持しません。)

  • Appレシートを使用した持続(iOS 7以降の非消耗型プロダクトと自動更新購読で推奨)
  • User DefaultsまたはiCloudを使用した値の持続
// User Defaultsを使用した値の持続の例)
MyClass.m

// 購入の持続的な記録
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL rocketCarEnabled = [defaults boolForKey:@"enable_rocket_car"];

// 購入アイテム使用時
if (rocketCarEnabled) {
 // ロケットカーを使用
} else {
 // 普通の自動車を使用
}

非消耗型プロダクトはAppレシートが推奨ですが、余力がなかったので記述は割愛します。

2-4. 購入終了処理

トランザクションオブザーバの削除を行います。(トランザクションが終了すると呼び出される)

MyClass.m
#pragma mark SKPaymentQueue
- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}

3. テスト

テストユーザーの作成と実機で確認します。
参考URL:iPad上でアプリ内課金 (In-App Purchase) の実機テストをする方法メモ

  1. iTunes Connectでテストユーザを作成します。(10 Minute Mailを使うと10分だけ無料でメアドが貰えるので便利かも)
  2. 実機の端末App IDをサインアウトし、アプリをインストールします。
  3. 追加した課金のシステムをテストします。テスト実施(課金イベント)時にサインインを求められるので、テストユーザーでサインインします。
  4. 課金成功のメッセージが表示されれば、無事課金完了です。

テスト実施時の注意事項
参考URL: iOSのアプリ内課金(In App Purchase)での注意点

  • テスト用のiTunesアカウントで事前にサインインしない
  • Appleサーバーに対してレシートの有効性を確認する場合には本番用URL -> サンドボックスURLの順で検証する

以上でアプリ内課金(In-App Purchase)の組込作業は終わりです。
お疲れ様でした!

.DS_Store とは

背景

以前書いた記事が自分の思わぬところで多くの人に見ていただけたので、もう少し「.DS_Store」について書きたいと思います。

「.DS_Store」ってなんとなく設定ファイルだと思っていたのですが、そもそもなんだっけ・・・
ということで「.DS_Store」について少し調べました。
過不足や誤記があればご連絡いただけると助かります。

  1. .DS_Storeとは
  2. コマンド(defaults write com.apple.desktopservices DSDontWriteNetworkStores true)を利用した場合の影響について
  3. コマンドを利用した場合の個人的な不具合体験談等

1. .DS_Storeとは

概要

 OS Xで作成された独自の形式の隠しファイルです。
アイコンの位置や表示設定などのフォルダ表示オプションに関するメタデータを保持しています。
デフォルトでFinder上でもリモートシステム上でもアクセスするすべてのフォルダに.DS_Storeファイルが作成されます。
 Apple側でも問題意識を持っていて、ネットワーク接続時に .DS_Store ファイルの作成を抑制する方法も紹介しています。(defaults write com.apple.desktopservices DSDontWriteNetworkStores trueコマンドの紹介)

作成されることによる問題点

  • Macユーザー以外から苦情
  • リビジョン管理時のファイル追加による負担
  • アーカイブ構造が重要である場合の余計なファイルによる構造的問題

wiki .DS_Storeより抜粋

2. コマンド(defaults write com.apple.desktopservices DSDontWriteNetworkStores true)を利用した場合の影響について

影響範囲

SMB/CIFS、AFP、NFSWebDAV サーバ
(USB、DropBox等はコマンドを実行しても作成されます。)

影響内容

Finderで予期しない動作が起こることがあります。
一例として、サーバボリューム上の項目の「情報を見る」のコメントを追加したり編集する場合、変更内容は他のクライアントやサーバ自体からは見えません。(ファイル本体ではなくメタデータに影響あり)
Mac OS X: リモートボリュームの「情報を見る」のコメントは表示されないことがあります

削除方法は色々なサイトに乗ってますが、.DS_Storeの説明や影響の記事が少なくて不安になる。。。

3. コマンドを利用した場合の個人的な不具合体験談等

 ファイルサーバ上の大きめのサイズのExcelが開けない場合がありました。
ローカルにコピーして、サーバのファイルに上書きして更新は出来ます。
自分以外の人が更新する場合ファイルがデグレードする場合があるので注意が必要です。
私のファイルサーバ上のExcel更新頻度は、週に2〜3回位なので不具合が余りなかったのかもしれません。

 私は、これからも.DS_Storeを作成しない方を選びます。
理由は、現在Excelを更新する業務は少ないし、会社の方針もGoogleDriveに移行していく予定なので今後も更新頻度は少なくなるからです。Macに変更した当初はExcelのマクロが使えない事に絶望を覚えましたが気にしないことにしました。
それ以上に、私の会社ではMacユーザーが少ない(1〜2人)ので何を見たのかが他の人に筒抜けの生活なんてもう耐えられないのです!
ファイルサーバ上で頻繁にファイルを変更するようなお仕事をされている方や重要なファイルを扱うような方は、事故を起こす可能性があるのでコマンドは利用せずにそのまま利用するのが良いのかもしれません。

Linux 基礎

概要

Linux(CeontOS)について昔まとめた資料です。
基礎なので、入門者や初心者向きです。

目次

  1. Linuxの基礎知識
  2. Linuxの基本操作
  3. ファイルとディレクトリ
  4. シェルとコマンド操作
  5. ネットワーク
  6. ユーザー管理
  7. ソフトウェアのインストール
  8. システム管理
  9. Webサーバー

1.Linuxの基礎知識

Linuxとは

1991年にフィンランドの大学生だったリーナス・トーバルスが作成。 その後開発者が改良を加え実用的なOSへと進化していく。

LinuxとはOSの一種で、厳密にはカーネルのみがLinuxカーネルとは、OSの中核部分の事でカーネルにプログラムの実行ライブラリや、日常的に使うツール、コマンド、グラフィカルなユーザーインターフェースを追加してOSとして使えるようになる。

ディストリビューション

カーネルに様々なソフトウェアをまとめたのがディストリビューション。 (多数のオープンソフトウェアや商用ソフトウェアを組み合わせ、1つのOS製品としてまとめあげたもの)

  • サーバーソフトウェア:webサーバー、メールサーバー、DNSサーバー、ファイルサーバー
  • クライアントソフト:オフィスソフト、ブラウザ
  • GUIX Windows System、ウィンドウマネージャー
  • シェル、コマンド、ライブラリ
  • Linuxカーネル

ディストリビューションの代表的な系統は3つ

系統 ディストリビューション 代表的パッケージ
Red Hat Fedora,Red Hat Enterprise Linux,CentOS RPM
Debian Debian GNU/Linux,Ubuntu,Linux Mint,Edubuntu Debian
その他 Slackware,opemSUSE,SUSE Linux Enterprise,Tiny Core Linux

※パッケージについては、7.ソフトウェアのインストールを参照

2.Linuxの基本操作

ユーザー

大きく分けて3つのユーザーがある

  • 管理ユーザ:システムの変更や実行、再起動など管理権限を持つ(root)(#で表記される)
  • システムユーザー:システムプログラムを実行するための専用アカウント(apache,DB等サービスのアカウント)
  • 一般ユーザー:作業用アカウント、通常は一般ユーザーでログインして他ではログインしない($で表記される)

※詳しくは6.ユーザー管理参照

コマンド

コマンドの正体はプログラム・ファイル。 シェル自身にもコマンドをもいくつかのコマンドをもっている。(内部コマンド、調べるにはtypeコマンドで内部コマンドか判断出来る。)

コマンド [オプション] [引数]

  • ファイル操作系コマンド
概要 コマンド 備考
ファイルの種類確認 file [ファイル名]
最初の1画面だけ表示される less [ファイル名]
所有者変更 chown [-R] [所有者] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有グループ変更 chgrp [-R] [所グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有者所有グループ変更 chown [-R] [所有者:所有グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
ファイルを探す find [ディレクトリ] [オプション] 例) find ~/ -name "hogehoge.txt"
ファイルの末尾を表示 tail [オプション] 例) tail -n 3 "hogehoge.txt"(下から3行)
tail -f "hogehoge.txt"(監視し常に最新を表示する)
  • その他
概要 コマンド 備考
使用中のシェルの確認 ps
ネットワークの再起動 /etc/init.d/network restart

変数・エイリアス

  • 変数

変数名=値
(変数に値を設定)
echo $変数名
(変数の値を確認)

  • 環境変数(定義したシェル上に加え、子シェルも変数が参照できる)

export 変数名
環境変数に設定)
printenv
環境変数の閲覧)

alias [エイリアス='コマンド [オプション 引数]']
エイリアスの設定)
unalias エイリアス
エイリアスの削除)

chkconfig サービス名 [on|off]

3.ファイルとディレクトリ

ファイルの種類

表記 概要 備考
- 通常ファイル テキストファイルとバイナリファイルがある
d ディレクトリ
l リンクファイル
b 特殊ファイル(ブロックデバイスファイル) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
c 特殊ファイル(キャラクタデバイス) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
lsでの例
-rw-rw-r--  1 vagrant vagrant  151  6月 30 15:26 2013 test.html
  ①   ②   ③    ④   ⑤      ⑥       ⑦
①ファイルモード(一番左はファイルの種類)
②リンク数
③ファイルの所有者
④ファイルの所有グループ
⑤ファイルサイズ
⑥最終更新日
⑦ファイル名

ファイルシステム(ディスクファイルシステム)

ファイルを保存する物理的な装置には、ハードディスク、SSDUSBメモリ、ネットワークドライブ等様々ものがある。 それらに記録されたファイルを管理する仕組みをファイルシステムという。 主なファイルシステムは次の通り。

  • ext4Linuxの標準で使われる
  • XFS:LinuxUNIXで使われる(堅牢性の高い)
  • FAT/VFAT:SDカードで使われる
  • NTFS:Windowsで使われる
  • ISO9600:CD-ROMで使われる
  • UDF:DVDで使われる

ディレクトリ構成

/ 概要
bin 一般ユーザーが実行できる基本的なコマンド
boot システムの起動に必要なファイル
dev デバイスファイル
etc システム設定ファイル
home ユーザーのホームディレクトリ
lib ライブラリ
lost+foumd 破損した
media DVDなどをマウントする場所
proc プロセス情報
root rootユーザー用ホームディレクトリ
sbin rootユーザーが実行できるシステム管理コマンド
tmp 一時的なファイル置き場
usr 各種プログラムやライブラリ、ドキュメント等
var ログファイル等更新されるファイル類

4.シェルとコマンド操作

シェル

コマンドを通してLinuxを利用する際に、ユーザーとLinuxの間を仲介しているプログラムをシェルという。 (ログイン時のデフォルトは/etc/passwdファイルで設定されている)

  • 主なシェル
シェル 概要
sh(Bourne Shell) UNIXの標準シェル。最低限の機能しか持たない
bash(Bourne Again Shell) shを改良して大幅に機能を拡張したシェル
tsh(TENEX C Shell) csh(C言語によく似た文法を使えるシェル)を拡張したシェル
ksh(Korn Shell) shを改良して大幅に機能を拡張したシェル
zsh(Z Shell) ksh,bash,tcshのいいところ取りをしたような高機能シェル
  • bashの主な内部コマンド
コマンド 概要 備考
alias エイリアスの作成
unalias エイリアスの解除
cd カレントディレクトリの変更
pwd カレントディレクトのパスを表示
echo 引数を表示
export 環境変数を設定
history コマンド履歴を表示 「!履歴番号」でその履歴のコマンドが実行される
kill プロセスにシグナルを送る 詳しくは8.システム管理参照
exit シェルの終了
  • bashの主なキー操作
コマンド 概要
[Ctrl]+[A] カーソルを行の先頭へ移動
[Ctrl]+[E] カーソルを行の末尾へ移動
[Ctrl]+[D] カーソル部分を1文字削除
[Ctrl]+[H] カーソルの左側を1文字削除
[Ctrl]+[L] 画面をクリア
[Ctrl]+[S] 画面への出力を停止
[Ctrl]+[Q] 画面への出力を再開
[Ctrl]+[C] 実行中のコマンドを中断

コマンドの入出力

入出力は次の3つ

  • 標準入力(入力元はキーボード)
  • 標準出力(出力先は端末画面)
  • 標準エラー出力(出力先は端末画面)

リダイレクト

「コマンド > ファイル名」 入力元をキーボードからファイルへと切り替えたり、出力を端末画面からファイルに切り替えたりすることが出来る。 リダイレクトを使うと標準出力を任意のファイルに切り替える事ができる。

例) cal > calendar.txt (画面には実行結果が表示されずファイルへ実行結果が出力される) (「コマンド >> ファイル名」だと上書きではなく追記される) (「コマンド 2> ファイル名」だと標準エラーのみファイルに出力される)

myprog < data1
(自作プログラムmyprogに、ファイルdata1からデータを入力する)

パイプ

「コマンド1 | コマンド2」 あるコマンドの実行結果を、別のコマンドで処理出来る。

バックグラウンド実行

「コマンド &」 コマンドを実行しながら端末の操作が出来る

オンラインマニュアル

man [セクション番号] [コマンド名またはファイル名]

ヘルプより詳しい使い方が出力される。 オンラインといってもシステムにインストールされているのでネットワーク経由でどこかに見に行くわけではない。 (一般的に、/usr/share/man配下に格納されている) マニュアルはいくつかのカテゴリーに分類されていて、それをセクション(章)という。

セクション 概要
1 誰でも実行できる一般ユーザーコマンド
2 システムコールカーネルの関数)
3 ライブラリの関数
4 デバイスファイル
5 ファイルの書式
6 ゲーム
7 その他
8 システム管理コマンド
9 Linux独自のカーネルルーチン用ドキュメント

5.ネットワーク

ネットワークコマンド

  • ifconfig

ifconfig

コマンドの主な出力

項目 概要
HWaddr MACアドレス
inet addr IPアドレスIPV4
Bcast ブロードキャストマスク
Mask サブネットマスク
inet6 addr IPアドレス

ping [オプション] ホスト

ICMPパケットを送信し続けその結果を表示する。 反応が返ってくれば少なくともネットワークが繋がっていて接続先ホストも起動しているということが確認出来る。 (ICMP(Internet Control Message Protocol)とは、エラーメッセージや制御メッセージを伝えるためのプロトコル

netstat [オプション]

送信先や送信元のアプリケーションを区別するために使われる番号がポート番号。 開いているポート番号を確認すれば、ローカルホスト上で動作しているサーバーソフトウェアや、通信中のソフトウェアを確認できる。

主なオプション

オプション 概要
-a すべてのソケット情報を表示
-n アドレスやポートを数字で表示
-t TCPポートだけを表示
-u UDPポートだけを表示

主なポート番号

ポート番号 プロトコル 概要
20,21 FTP FTPサーバー(ファイル転送)
22 SSH SSHサーバー(安全なリモート接続)
23 telnet Telnetサーバー(リモート接続)
25 SMTP メールサーバー
53 DNS DNSサーバー
80 HTTP Webサーバー
110 POP3 メールサーバー
443 HTTPS Webサーバー(SSL

ネットワークの設定

  • 設定ファイル

/etc/sysconfig/network

主な設定項目

設定項目 概要
NETWORKING yesならネットワークサービスをシステム起動時に有効にする
HOSTNAME ホスト名
GATEWAY デフォルトゲートウェイ(ルータ)のIPアドレス
  • ネットワークの再起動コマンド

/etc/init.d/network restart

ファイルダウンロード

  • FTPでダウンロード

lftp 接続ホスト
(ホストに接続)
get ファイル名
(ファイルのダウンロード(mgetだと複数取得出来る))
quit
(lftpを終了)

  • HTTP接続でダウンロード

wget [-R] 接続URL
例) wget -r http://example.com/
-rを付与すると配下のファイルもget出来る

リモート接続

主にリモート接続にはSSH(Secure SHell)が使われます。 SSHクライアント⇔SSHサーバー (通信経路が暗号化されます)

  • SSHコマンド(sshでリモート接続)

ssh [ユーザー名@]接続ホスト

  • SCPコマンド(sshでファイルコピー)

scp [-r] コピー元 コピー先
例)scp sample.txt test.host.jp:/tmp
→sample.txtがホスト(test.host.jp)の/tmp直下にコピーされる

6.ユーザー管理

ユーザー情報

  • ユーザー情報

/etc/passwd
(1ユーザーにつき1行で情報が格納される)

  • パスワード情報

/etc/shadow
(暗号化されたパスワード情報が格納される。rootユーザーのみ閲覧可能)

  • ユーザー切替え

su [ユーザー名]

  • UID(ユーザーに割り当てらた固有の数値)

id [ユーザー名]
uid=500(vagrant) gid=500(vagrant) 所属グループ=500(vagrant),10(wheel)

ユーザーとUIDの対応

ユーザー UID 備考
管理ユーザー 0
システムユーザー 1~99
一般ユーザー 100以上 CentOS等多くのディストリビューションでは500以上のUIDが使われている
  • グループ情報

/etc/group
(ユーザーは最低限1つのグループに所属しなけばいけない。
基本グループはプライマリーグループ、それ以外はサブグループと呼ぶ。
一般的なディストリビューションの場合、ユーザー追加時にユーザーと同じ名前のグループでプライマリーグループが設定される)

  • グループ情報確認

groups [ユーザー名]

ユーザー情報変更

  • ユーザー追加

useradd ユーザー名
(root権限が必要)

  • パスワード変更

passwd [ユーザー名]
(ユーザー名を省略すると自分のパスワード変更が出来る)

  • ユーザ削除

userdel [-r] ユーザー名
(-rオプションを指定すとホームディレクトリも一緒に削除される)

グループ情報変更

  • グルプ追加

groupadd グループ名

  • グループにユーザーを追加

usermod -G グループ名 ユーザー名

  • グループ削除

groupdel グループ名

ユーザー環境変更

ユーザーに関わる情報は、Linuxのシェル上では変数に保存される。

ユーザー環境に関わる主な変数

変数 概要
HOME ユーザーのホームディレクトリ
LANG ユーザーの言語環境
PATH コマンドを検索するディレクトリ
UID ユーザーID
USER ユーザー名

シェルは、ユーザーがログイン時にとくてのファイルを読み込むようになっている。 ユーザー環境を設定したい場合、その設定ファイルの定義を追加すればよい。 具体的には、/etc/profileファイルと~/.bash_profileファイルが読み込まれる。 /etc/profileは全ユーザー共通の設定で、~/.bash_profileはユーザー固有の設定。 (変更を出来るのは~/.bash_profileのみ)

7.ソフトウェアのインストール

パッケージ

パッケージとは、インターネットで配布されているソフトウェアを簡単にインストール出来るようにしたのもの。(ソフトウェアには実行ファイルやマニュアル、ドキュメントファイル、設定ファイル、関連ライブラリ等が含まれており、まとめてパッケージと呼ぶ) 大半のLinuxディストリビューションは、ソフトウェアをパッケージ単位で管理する。

  • RPMパッケージのファイルの見方

emacs-23.1-21.el6_2.3.x86_64.rpm

arch
(32ビット=i386,i586,i686、64ビット=x86_64)

  • 高度なパッケージ管理システム

rpmコマンドだけでは、管理者が手動で依存関係を解決しなければならなく管理が大変。 CentOSではYUMを使ってパッケージ管理が出来る。 YUMを使うとパッケージとその情報が蓄積されたインターネット上のリポジトリを利用し、必要なパッケージをインストールでき、依存関係も自動で解決してくれます。

yum [-y] サブコマンド

主なサブコマンド 概要
update システム(または指定したパッケージ)をアップデート
check-update アップデートされるパッケージ一覧表示
install 指定したパッケージのインストール
remove 指定したパッケージのアンインストール
list パッケージ一覧表示
info 指定したパッケージの情報を表示
serch パッケージを検索

8.システム管理

プロセスとデーモン

  • プロセス
    プログラムを実行すると、メモリが割り当てられCPUによって処理される事をプロセスと呼ぶ。 (Linuxは、複数ユーザーが同時操作する事を前提としておりマルチタスクのOSとして設計されている。同時にプログラムが実行されているように見えるのは、CPUの処理を細切れにしてごく短い時間で切り替えながら処理をしている)

ps [オプション]
(オプションを付けずに実行すると、端末上で実行されているプロセス一覧が表示される)
(オプションにa及びxを付けて実行すると、システム上で実行されているプロセス一覧が表示される(uを付けるとユーザーも表示される)

pstree
(プロセスの親子関係が確認できる)

kill [-[SIG]シグナル] PID
(プロセスにシグナルを送る)

psコマンドの例)
[root@localhost ~]## ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  19228  1508 ?        Ss   01:03   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    01:03   0:00 [kthreadd]

psコマンドの主な出力項目

項目 概要
USER 実行ユーザー
PID プロセスID
%CPU CPU利用率
%MEM メモリ利用率
TTY プロセスを実行した端末
STAT プロセスの状態
START プロセスの実行日
TIME 消費したCPU時間
COMMAND コマンドまたはプログラム名
killコマンドの例)
[vagrant@localhost ~]$ kill -TERM 1989

主なシグナル

シグナル シグナル番号 概要
HUP 1 ハングアップ(設定ファイルを再読み込みさせたいとき使う)
KILL 9 強制終了
TERM 15 通常終了
CONT 18 一時停止中のプロセス再開
STOP 19 一時停止
  • デーモン
    メモリに常駐しているプロセスをデーモンと呼ぶ。 一般的なデーモン起動を起動するサービスは/etc/init.d/に格納されている。
    (プロセスには、処理が終了すると消滅するものと、ずっとメモリ上に常駐し要求に応じてサービスを提供するものがあります。殆どのプロセスは前者で、システムサービスやサーバープログラムは後者となる。)

主な起動スクリプト

起動スクリプト 説明
/etc/init.d/network ネットワークサービス
/etc/init.d/crond 定期的な処置をするcronサービス
/etc/init.d/cups 印刷サービス
/etc/init.d/rsyslog シスログサービス
/etc/init.d/sshd SSHサーバー
/etc/init.d/postfix Postfixサーバー
/etc/init.d/httpd Apachサーバー

システム状況監視

topコマンドの例)
[vagrant@localhost ~]$ top

①top - 05:38:52 up  4:34,  1 user,  load average: 0.00, 0.00, 0.00
②Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie
③Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
④Mem:    379532k total,   176224k used,   203308k free,    14520k buffers
⑤Swap:   786424k total,        0k used,   786424k free,    86204k cached

⑥  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
    1 root      20   0 19228 1508 1216 S  0.0  0.4   0:00.89 init  

①top - 05:38:52 up 4:34, 1 user, load average: 0.00, 0.00, 0.00 ロードアベレージは平均的なシステム負荷の値で、一般的にはCPU数(コア数)以下であれば問題なし。(例えば2コアでCPUを2つ搭載しているマシンでは、4.0を下回っていれば、システム負荷は高くない)

② Tasks: 111 total, 1 running, 110 sleeping, 0 stopped, 0 zombie 実行中のプロセス数が表示される

③Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st CPUの負荷状況が表示される

④Mem: 379532k total, 176224k used, 203308k free, 14520k buffers ⑤Swap: 786424k total, 0k used, 786424k free, 86204k cached メモリやスワップについて表示される。(詳しくはfreeコマンド参照)

⑥ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19228 1508 1216 S 0.0 0.4 0:00.89 init
個々のプロセスが表示される。 CPUやメモリを多く消費しているプロセスを確認すると良い。(CPU利用率=%CPU、メモリ占有率=%MEM)

デスク使用量監視

df [オプション]
ファイルシステムごとのディスク使用量や使用割合、空き容量を確認出来る)
(オプションにHを付けると見やすい単位で表示する)

メモリ監視

free [オプション]
(メモリの利用状況を確認できる)
(オプションにmを付けるとMバイト単位で表示する)

freeコマンドの例)
[vagrant@localhost ~]$ free -m
              total       used       free     shared    buffers     cached
①Mem:           370        172        198          0         14         84
②-/+ buffers/cache:         73        297
③Swap:          767          0        767

// トータル370Mバイトのうち、172Mバイトが使われ、空きが198Mバイト
// しかし、一部バッファキャッシュに利用されているため、実際に使われているのは73Mバイト、空きは297Mバイトとなる。
// メモリに余裕があるためスワップは使用されていない

①Mem: 370 172 198 0 14 84 メモリの状況

②-/+ buffers/cache: 73 297 バッファキャッシュを引いた値 (空きメモリがあるとハードディスクへのアクセスを高速化するため、メモリの一部を利用する。これをバッファキャッシュという。 実際に使われているメモリは、バッファキャッシュの値を差をみる。)

③Swap: 767 0 767 スワップ状況 (メモリが不足すると一時的にディスクの一部を仮想メモリとして利用する。これをスワップという。 スワップが日常的に発生しているならメモリの増設が必要。)

freeコマンドの表示項目

項目 概要
Mem total 前メモリの合計
used 使用中のメモリ
free 空きメモリ
shared 未使用
buffers バッファ
cached キャッシュ
-/+ buffers/cache: used バッファキャッシュ以外に使われているメモリ
free バッファキャッシュを含めた空きメモリ
swap total スワップ領域の合計
used 使用中のスワップ領域
free 空きスワップ領域

ログ管理

/var/log
(システムやサービスプログラムの挙動、ユーザーのログイン状況等がログファイルに記録される)

主なログファイル

/var/log/ 概要
messages システム一般記録
scure 認証関連の記録
maillog メール関連の記録
cron cronによる自動処理の記録
rpmpkgs インストール済みRPMパッケージの記録

また、CentOSにはlogwatchというソフトウェアが用意されており、一日に一度重要な項目をメールにまとめてレポートを送ってくれる。

9.Webサーバー

Apache

Apache Projectによって開発されたWebサーバーソフト。

Apache代表的な機能

  • 静的なWebページの配信
    HTMLと画像のみで構成されたwebページ等
  • 動的なWebページの配信
    掲示板やECサイト等、ユーザーのアクションで表示が変わる
  • モジュール構成
    様々な機能がモジュールとして分割され必要に応じて本体に組み込み利用できる
  • SSl(Secure Socket Layer)
    暗号化された安全な通信の提供
  • ユーザ認証
    ユーザー名とパスワードを使って特定のユーザーのみ公開できる
  • ホスト認証
    特定のホスト名やドメインIPアドレスからのアクセスを拒否することができる
  • バーチャルホスト
    一台のWebサーバーで異なるドメインを持つ複数のWebサイトを運用できる

Apacheの設定

/etc/httpd/conf/httpd.conf
Apacheの設定ファイル)

httpd.confの内容

ディレクティブ 概要 詳細
ServerRoot 設定等のトップディレクトリ Apacheの設定ファイルが格納されているディレクトリを指定
Listen サーバーの待ち受けるポート番号 通常は80番ポートで待ち受けるため変更不要
Include 外部の設定ファイル httpd.conf以外の外部ファイルのサブ設定ファイルを指定
User Apacheの実行ユーザー デフォルトはApacheになっており、作成されたファイルもApache権限で読み取りできるようにする必要がある
Group Apacheの実行グループ
Server Admin サーバー管理者 サーバー管理者のメールアドレス
ServerName サーバー名
DocumentRoot ドキュメントルート webサイトのトップディレクトリ
DiretoryIndex インデックスファイルの指定 URLでファイル指定されなかった時に、インデックスファイルとして返すファイル名を指定

Apacheコマンド

httpd -t
httpd.confの構文チェック。「Syntax OK」と表示されたら構文上はミスはない) /etc/init.d/htppd start
(起動) /etc/init.d/htppd status
(確認) /etc/init.d/htppd stop
(停止)

おすすめ書籍

Linuxを全く分からなくても丁寧にわかりやすく解説されてます。
進み方も調度良く、分かりやすく書いてあるのでかなりオススメ!!

サーバー構築 サービスメモ

概要

サーバー構築サービスの備忘録メモです。

  1. サービスの種類
  2. VPS
  3. まとめ

1. サービスの種類

共有レンタル VPS クラウド(IaaS)※2
タイプ※1 共有 仮想 仮想
価格 0〜低
管理者権限
管理者知識 不要 必須 必須
自由度 ☓(webのみ)
構成変更
※1
共有サーバーは、1台のサーバーを複数のユーザーで共有。(他のユーザーの影響を受けるが専門知識が不要)
(専有サーバーは、1台のサーバーを単独のユーザーで占有。(物理的なサーバを専用しているためメンテナンスやハード障害の影響を受ける))
仮想サーバーは、1台のサーバー内に自分だけの専用領域を確保。(システム設定など) 
※2
* IaaS:インフラ(仮想サーバやネットワーク)
  →AmazonEC2等
* PaaS:プラットフォーム(開発環境やアプリケーションの動作環境)
  →GoogleAppEngine、dotCloud等
* SaaS:アプリケーション
  →Gmail等

参考URL

2. VPS

2-1. メモリ2G前後のVPS

さくら DTI KDDI お名前.com KAGOYA
サービス名 さくらのVPS 2G ServersMan@VPS Standard CloudCore VPS VPS(KVM)メモリ2GB タイプA
初期費用 0円 0円 0円 0円 0円
月額 1,480円 980円 2,100円 1,380円 840円
CPU 2.40Ghz 2.13Ghz 2.20GHz 3.06Ghz 2.53Ghz
メモリ 2GB 最大4GB 2GB 2GB 最大2GB
HDD 200GB 100GB 100GB 200GB 200GB
ネットワーク 100Mbps共有 不明 100Mbps共有 100Mbps共有 不明
仮想化プラットフォーム KVM OpenVZ KVM KVM OpenVZ
対応OS CentOS 5(32/64)
CentOS 6(32/64)
Scientfic Linux6(32/64)
Ubuntu 10.04(32/64)
FreeBSD 8.1(32/64)
Debian 6(32/64)
Fedora 16(32/64)
CentOS 5(32/64)
CentOS 6(32/64)
Ubuntu 10.04(32/64)
Debian 5(32/64)
Debian 6(32/64)
CentOS 5
不明
CentOS 6 (64)
Scientfic Linux
Fedora
Debian
Ubuntu
FreeBSD
Arch Linux
CentOS 5(32/64)
Ubuntu 10.04(32/64)
Debian 5(32/64)

SaaSesは2014年4月1日より法人向けクラウドに移行したようです。
参考URL:http://temog.info/archives/vps/vps-comparison-sakura-dti-saases-kddi-gmo-kagoya.html

2-2. 月額500円以下のVPS

DTI ServerQueen ABLENET
初期費用 0円 0円 980円
月額 490円 480円(1年契約) 480円
メモリ 1GB 256MB 1GB
HDD 50GB 10GB 50GB

ServerQueenは、この価格での新規提供終了したようです。
月額500円以下のプランがあるVPSまとめ

2-3. 無料のVPS

VPS.me Host1Free
CPU 0.6G ?
メモリ 384MB 128MB
Disk space 5GB 10GB
備考 空きがない場合があり最後まで登録しないと空き状況がわからない(参考URL:http://yokoswork.blogspot.jp/2014/01/vps-vpsme.html 登録や設定に癖があり、ミスすると消される

3. まとめ

個人的には、DTIの490円がオススメ!
レンタルサーバーだと、管理権限がなくて自由度が低い。クラウドだと遊びや勉強で使うには料金が高い。
無料のVPSだと空き状況や登録が厄介だし、何よりサーバーに詳しくないから英語が厳しい。